13. Quelques recettes pour faire durer le plaisir
Extraire seulement les caractères de 5 à 7
Extraire les caractères à partir de 5
Savoir si une condition est vraie ou fausse?
Est-ce que le contenu des valeurs correspond à “2019-01-01”
Connaître la longueur des valeurs d’une colonne
Compter le nombre de mots dans des cellules (séparés par des espaces)
- value.split(" ").length() ou value.split(//).length()
Calcul d’un pourcentage arrondi (ex d’un résultat sur 10)
Transformer un format date en format texte plus lisible
- value.toString(“dd MMMM yyyy”)
La création et manipulation de listes (array) - Diviser le contenu de cellules
Diviser le contenu de cellules en fonction d’un séparateur pour ne conserver que le premier élément
Diviser le contenu d’une cellule pour le réordonner
value.split(“,”).reverse().join(“,”)
value.split(“,”).sort().join(“,”)
Diviser après les 3 premiers caractères et conserver le premier élément
- value.splitByLengths(3)[0]
Diviser selon le type de caractères et retenir le deuxième élément
- value.splitByCharType()[1]
Diviser le contenu d’une cellule sur un terme x et conserver le contenu précédent
Inverser le contenu d’une cellule
Diviser le contenu d’une cellule et inverser l’ordre de présentation en ajoutant une virgule entre les deux
- value.split(’ ‘)[1] + “,” + " " + value.split(’ ’)[0]
OU
- value.match(/(.),(.)/).reverse().join(" ")
Ajouter un zéro pour avoir un nombre de caractères précis
Ajouter un zéro devant le contenu si donne une chaine de 0 à 2 caractères
- “0”[0,2-length(value)] + value
Appliquer des conditions
Fonction if - même chose que dans excel
- if(test, si test est vrai, si test est vrai)
Si la cellule contient x, écrire x, sinon y
if(value.contains(“x”), “x”, “y”)
if(value.contains(“1”), value, null)
Comparer deux colonnes
Identifier si le contenu des cellules d’une colonne est pareil à une autre
- value == cells[‘autre-colonne’].value
Est-ce que le premier caractère de la colonne x est le même que la colonne y
- cells[“colonne1”].value[0] == cells[“colonne2”].value[0]
Comparer le contenu de deux colonnes et modifier les valeurs selon le résultat de la condition
- if(cells[“colonne1”].value == cells[“colonne2”].value, “Pareil”, “Pas pareil”)
Vérifier le format d’une colonne
Faire des calculs simples (valeurs numériques)
Somme d’une colonne plus une autre
- value + cells[‘Jour du mois’].value
Arrondir le contenu
Reprendre et concaténer le contenu d’une autre colonne
Créer une nouvelle colonne en fusionnant le contenu de deux autres et ajouter du texte
- cells[‘nom’].value + cells[‘nom’].value + “Bonjour!”
Créer une nouvelle colonne avec les trois premiers caractères seulement
- cells[‘Symptome’].value[0,3]
Transformer le contenu d’une colonne en concaténant le contenu d’une autre
- value + ’ ’ + cells[‘street-type’].value
Remplacer des caractères
Remplacer tout le contenu d’une colonne (ici, vider la colonne)
Remplacer une lettre par une autre
- value.replaceChars(“o”, “a”)
Faire plusieurs remplacements d’un coup
- value.replace(“1”, “un”).replace(“2”, “deux”).replace(“3”, “trois”)
Identifier des cellules qui commencent par… (résultat booléen)
- value.startsWith(“Berri”)
Supprimer un caractère de début ou fin de valeur:
Supprime “S” du début de la cellule
- value.replace(/^S/,"") [regex ^ indique le début d’une cellule]
Supprime “.” à la fin de la cellule
- value.replace(/.$/,"") [regex $ indique la fin d’une cellule]
Modifier/supprimer la ponctuation
Travailler avec un format date
Extraire seulement une partie d’une date
value.toDate().datePart(“year”)
diff(now(),value,‘weeks’)
LS0tDQp0aXRsZTogIk9wZW5SZWZpbmUiDQphdXRob3I6ICJDYXJvbGluZSBQYXRlbmF1ZGU8L2JyPkJpYmxpb3Row6hxdWUgZGVzIGxldHRyZXMgZXQgc2NpZW5jZXMgaHVtYWluZXMsIFVuaXZlcnNpdMOpIGRlIE1vbnRyw6lhbDwvYnI+Y2Fyb2xpbmUucGF0ZW5hdWRlQHVtb250cmVhbC5jYSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBoaWdobGlnaHQ6IGthdGUNCiAgICB0aHVtYm5haWxzOiBmYWxzZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBtYXRoamF4OiBudWxsDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iNzUiKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9NzUpDQpgYGANCg0KDQoNCiFbXShpbWFnZXMvT1ItbG9nby5qcGcpIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIE9iamVjdGlmcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IxNi5qcGciIHdpZHRoPSIyNTBweCIgLz4NCjwvZGl2Pg0KDQotIENvbXByZW5kcmUgbGUgZm9uY3Rpb25uZW1lbnQgZHUgbG9naWNpZWwuDQotIEltcG9ydGVyIGV0IGV4cGxvcmVyIHVuIGpldSBkZSBkb25uw6llcy4gDQotIE1hbmlwdWxlciBldCB0cmFuc2Zvcm1lciBkZXMgZG9ubsOpZXMuDQotIFMnaW5pdGllciDDoCBsJ3VzYWdlIGR1IGxhbmdhZ2UgR1JFTCBldCBhdXggZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzLg0KPC9icj4NCjwvYnI+DQo8L2JyPg0KPC9icj4NCjwvYnI+DQoNCioqKg0KDQoNCiMgMS4gUHLDqWxpbWluYWlyZXMNCiMjIERlcyBkb25uw6llcyBiaWVuIG9yZG9ubsOpZXMgY29tbWVuY2VudCBwYXIgc29pLW3Dqm1lIQ0KDQoNCi0gTGUgbmV0dG95YWdlIGRlIGZpY2hpZXJzIGRlIGRvbm7DqWVzIGVzdCB1bmUgdMOiY2hlIHNvdXZlbnQgbG9uZ3VlIGV0IGVubnV5ZXVzZSBtYWlzIGluY29udG91cm5hYmxlIGF2YW50IHRvdXRlIGFuYWx5c2Ugb3UgZGlmZnVzaW9uIGRlIGRvbm7DqWVzLg0KDQotIEwnYW1wbGV1ciBkZSBjZXR0ZSB0w6JjaGUgZMOpcGVuZHJhIGRlIGwnw6l0YXQgZGVzIGRvbm7DqWVzIGV0IGR1IHR5cGUgZGUgbG9naWNpZWwgcXVpIHNlcmEgZW5zdWl0ZSB1dGlsaXPDqSDDoCBkZXMgZmlucyBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiAoUiwgU1BTUywgU3RhdGEsIFRhYmxlYXUsIEFyY0dJUy4uLikNCg0KPC9icj4NCg0KIyMjIyBQcm9ibMOobWVzIGNvdXJhbnRzIHJlbGF0aWZzIMOgIGxhIGZvcm1lIGV0L291IGF1IGNvbnRlbnUgZCd1biBqZXUgZGUgZG9ubsOpZXM6DQoNCi0gUHJvYmzDqG1lcyBkJ2VudMOqdGVzIGV0IGRlIG5vbXMgZGUgdmFyaWFibGVzLg0KLSBDZWxsdWxlcyBmdXNpb25uw6llcywgcXVpIGNvbnRpZW5uZW50IGRpZmbDqXJlbnRlcyBpbmZvcm1hdGlvbnMuDQotIFZhcmlhYmxlcyBxdWkgbmUgc29udCBwYXMgY2xhaXJlbWVudCBkw6lmaW5pZXMgw6AgbGEgdmVydGljYWxlLg0KLSBDb250ZW51IHRleHR1ZWwgbm9uIHN0cnVjdHVyw6kuDQotIFByb2Jsw6htZXMgZGUgZm9ybWF0cywgZGUgInBldGl0cyBjYXJhY3TDqHJlcyIgLT4gc8OpcGFyYXRldXJzL2TDqWxpbWl0ZXVycyBkZSBjb250ZW51IGV0IGRlIGNvbG9ubmVzLCBndWlsbGVtZXRzLCBlbmNvZGFnZSAoJycgIHx8IHwgIiIgLCAuIDsgKQ0KLSBQcsOpc2VuY2UgZGUgY2VsbHVsZXMgdmlkZXMsIGVzcGFjZXMuLi4NCg0KW0EgY2FzZSBzdHVkeSBpbiBtZXNzeSBkYXRhIGFuYWx5c2lzOiB0aGUgQXVzdHJhbGlhbiBzYW1lLXNleCBtYXJyaWFnZSBzdXJ2ZXldKGh0dHBzOi8vYmxvZy5yZXZvbHV0aW9uYW5hbHl0aWNzLmNvbS8yMDE3LzEyL3NleC1tYXJyaWFnZS1zdXJ2ZXkuaHRtbCkNCg0KPGNlbnRlcj4NCg0KIVtdKGltYWdlcy9PUjkuanBnKXt3aWR0aD02MCV9ICANCg0KPC9jZW50ZXI+DQoNCjwvYnI+DQoNCioqKg0KDQoNCkF2YW50IGQndXRpbGlzZXIgc2VzIGRvbm7DqWVzIGRhbnMgbGUgbG9naWNpZWwgZGUgc29uIGNob2l4LCBsZSBuZXR0b3lhZ2UgZGUgc2VzIGRvbm7DqWVzIHBldXQgZG9uYyBpbmNsdXJlIGRlIG5vbWJyZXVzZXMgdMOiY2hlcyBjb21tZToNCg0KPGRpdiBjbGFzcyA9ICJyaWdodCI+DQo8aW1nIHNyYz0iaW1hZ2VzL2JvdHRsZS5wbmciIHdpZHRoPSIxNzVweCIgLz4NCjwvZGl2Pg0KLSBNb2RpZmllciBsJ2VuY29kYWdlLg0KLSBTdXBwcmltZXIgbGVzIGRvdWJsb25zLg0KLSBEaXZpc2VyIGxlcyBjZWxsdWxlcyBjb21wb3PDqWVzIGRlIHZhbGV1cnMgbXVsdGlwbGVzLiAgIA0KLSBSZWNvZGVyIGxlcyB2YWxldXJzIG1hbnF1YW50ZXMuDQotIFJlcMOpcmVyIGxlcyBlcnJldXJzIGRlIHNhaXNpZSwgbGVzIHZhbGV1cnMgYWJlcnJhbnRlcy4uLg0KLSBGdXNpb25uZXIgZGVzIGZpY2hpZXJzLg0KLSBGdXNpb25uZXIgZGVzIGNvbG9ubmVzLg0KLSBBZ3LDqWdlciBkZXMgdmFsZXVycyBkZSB2YXJpYWJsZXMuDQotIENyw6llciBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkdSBmaWNoaWVyLg0KLSBUcmFuc2Zvcm1lciBsZXMgY29sb25uZXMgZW4gcmFuZ8OpZXMgKGZvcm1hdCAid2lkZSIgZW4gImxvbmciKS4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyAyLiBQb3VycXVvaSBPcGVuUmVmaW5lPw0KDQotIFBsdXNpZXVycyBsYW5nYWdlcyBkZSBwcm9ncmFtbWF0aW9uIGV0IG91dGlscyBkJ2FuYWx5c2Ugb3UgZGUgZ2VzdGlvbiBkZSBkb25uw6llcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcywgbWFpcyBPcGVuUmVmaW5lIGEgw6l0w6kgY3LDqcOpIHNww6ljaWZpcXVlbWVudCBwb3VyIGZhaXJlIGxlIG3DqW5hZ2UhDQoNCi0gUGx1cyBmYWNpbGUgcXVlIFIgZXQgcGx1cyBlZmZpY2FjZSBxdSdFeGNlbC4NCg0KLSBQZXJtZXQgZGUgZmFjaWxlbWVudCBpZGVudGlmaWVyIGV0IGRlIGNvcnJpZ2VyIGVuIGxvdCBkZXMgZG9ubsOpZXMgaW5jb21wbMOodGVzLCBtYW5xdWFudGVzLCBlcnJvbsOpZXMsIGluY29ow6lyZW50ZXMsIG5vbiBwZXJ0aW5lbnRlcywgbWFsIGZvcm1hdMOpZXMsIHF1J2VsbGVzIHNvaWVudCBudW3DqXJpcXVlcyBvdSB0ZXh0dWVsbGVzID0+IHNhdXZlIHRlbXBzIGV0IMOpbmVyZ2llLg0KDQoNCjxjZW50ZXI+ICAgDQoNCjxpbWcgc3JjPSJpbWFnZXMvMTkxOC1BZC04NjAtODYweDU3My5qcGciIHdpZHRoPSI2MCUiLz4NCg0KPC9jZW50ZXI+ICAgDQoNCg0KPC9icj4NCg0KIyMjIEZvbmN0aW9ucyBzcMOpY2lhbGlzw6llcyBwb3VyOg0KDQotICpFeHBsb3Jlciogc2VzIGRvbm7DqWVzIHNvdXMgdG91cyBzZXMgYW5nbGVzIChncsOiY2Ugw6AgZGVzIGZpbHRyZXMsIHRyaXMsIGZhY2V0dGVzLCByZWdyb3VwZW1lbnRzKS4gICANCi0gKk5ldHRveWVyKiA6IHJlcMOpcmVyIGRlcyBlcnJldXJzLCBtb2RpZmllciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcy4uLg0KLSAqVHJhbmZvcm1lciogOiBjaGFuZ2VyIGZvcm1hdHMgZGUgc2VzIHZhcmlhYmxlcywgY3LDqWVyIGRlIG5vdXZlbGxlcyB2YXJpYWJsZXMgc3VyIGxhIGJhc2UgZGVzIGNvbG9ubmVzIHByw6lzZW50ZXMuLi4NCi0gKkVucmljaGlyKiA6IGZ1c2lvbm5lciBkZXMgZmljaGllcnMsIGltcG9ydGVyIGRlcyBkb25uw6llcyBlbiBsaWduZSAoQVBJLCBVUkxzKSwgcsOpY29uY2lsaWF0aW9uIChXaWtpZGF0YSBldCBbYXV0cmVzIHNvdXJjZXMgZXh0ZXJuZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9SZWNvbmNpbGFibGUtRGF0YS1Tb3VyY2VzKSkuLi4NCi0gKkF1dG9tYXRpc2VyKiAocsOpdXRpbGlzZXIgc29uIGhpc3RvcmlxdWUgZGUgbWFuaXB1bGF0aW9ucykNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCg0KKirDgCBub3RlcioqIA0KDQpPcGVuUmVmaW5lIG4nZXN0IHBhcyB1biBvdXRpbCBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiBldCBuZSBwZXJtZXQgcGFzIGRlIGNyw6llciB1biBqZXUgZGUgZG9ubsOpZXMgw6AgcGFydGlyIGRlIHrDqXJvLiBDZSBuJ2VzdCBwYXMgdW4gb3V0aWwgZGUgcmVtcGxhY2VtZW50IG1haXMgY29tcGzDqW1lbnRhaXJlLg0KDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjEuIEV4ZW1wbGVzIGQndXRpbGlzYXRpb24NCg0KSGFybW9uaXNlciwgc3RhbmRhcmRpc2VyLCB1bmlmb3JtaXNlci4uLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I4LmpwZykgICANCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMi4yLiBQb3VyIGF2b2lyIGRlIGJlbGxlcyBkb25uw6llcyAqdGlkeSoNCg0KUGVybWV0IGQnYXBwbGlxdWVyIGxlcyBwcmluY2lwZXMgZHUgW1RpZHlkYXRhXShodHRwczovL3I0ZHMuaGFkLmNvLm56L3RpZHktZGF0YS5odG1sKSANCg0KPiDigJxUaWR5IGRhdGFzZXRzIGFyZSBhbGwgYWxpa2UsIGJ1dCBldmVyeSBtZXNzeSBkYXRhc2V0IGlzIG1lc3N5IGluIGl0cyBvd24gd2F5LuKAnSDigJPigJMgSGFkbGV5IFdpY2toYW0NCg0KPC9icj4NCg0KKipUcm9pcyBwcmluY2lwZXMgZGUgYmFzZToqKg0KDQoxLiBDaGFxdWUgY29sb25uZSBlc3QgdW5lICoqdmFyaWFibGUqKi4NCjIuIENoYXF1ZSBsaWduZSBlc3QgdW5lICoqb2JzZXJ2YXRpb24qKi4NCjMuIENoYXF1ZSBjZWxsdWxlIMOgICoqdW5lIHNldWxlIHZhbGV1cioqLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxMC5qcGcpIA0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjMuICBQcmluY2lwYWxlcyBjYXJhY3TDqXJpc3RpcXVlcw0KDQotIExvZ2ljaWVsIGdyYXR1aXQgZXQgb3V2ZXJ0IHV0aWxpc8OpIHBhciB1bmUgbGFyZ2UgY29tbXVuYXV0w6kuDQoNCi0gQ3LDqcOpIGVuIDIwMTAgKCpGcmVlYmFzZSBHcmlkd29ya3MqKSwgcmFjaGV0w6kgcGFyIEdvb2dsZSBlbiAyMDEwICgqR29vZ2xlIFJlZmluZSopLCBwdWlzIG91dmVydHVyZSBkdSBjb2RlIGVuIDIwMTIgZXQgcmVwcmlzIHBhciBjb21tdW5hdXTDqSBxdWkgbGUgZMOpcGxhY2Ugc3VyIEdpdGh1YiBldCBkZXZpZW50ICpPcGVuUmVmaW5lKi4NCg0KLSBNdWx0aXBsYXRlZm9ybWVzOiBXaW5kb3dzLCBNYWMsIExpbnV4Lg0KDQotIEludGVyZmFjZSBzZW1ibGFibGUgw6AgdW4gdGFibGV1ciBjb21tZSBFeGNlbCwgbWFpcyBkb250IGxlIGZvbmN0aW9ubmVtZW50IHMnYXBwYXJlbnRlIHBsdXMgw6AgdW5lIGJhc2UgZGUgZG9ubsOpZXMgKHBhciBleGVtcGxlIGxlcyB0cmFpdGVtZW50cyBzb250IHPDqXBhcsOpcyBkZXMgZG9ubsOpZXMsIGllIGxlcyBmb3JtdWxlcyBuZSBzb250IHBhcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbGVzIGNlbGx1bGVzIG1haXMgZGFucyB1biBzY3JpcHQpLg0KDQotIEFzc29jaWUgbGEgZmFjaWxpdMOpIGQndXNhZ2UgZCd1biBsb2dpY2llbCBjb21tZSBFeGNlbCDDoCBsYSBwdWlzc2FuY2UgZCdvdXRpbHMgZGUgcHJvZ3JhbW1hdGlvbiBldCBkJ2FsZ29yaXRobWVzLg0KDQotIFVzYWdlIGRlIGwnKippbnRlcmZhY2UgZ3JhcGhpcXVlKiogZXQvb3UgKipzY3JpcHRzIEdSRUwqKiAoKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSopOiBwcm9wb3NlIHVuIGVuc2VtYmxlIGRlIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGRvbmMgbmUgbsOpY2Vzc2l0ZSDDoCBsYSBiYXNlIGF1Y3VuZSBjb21ww6l0ZW5jZSBlbiBwcm9ncmFtbWF0aW9uIG91IGFuYWx5c2UsIG1haXMgbCd1c2FnZSBkdSBsYW5nYWdlIHBlcm1ldCBkJ2FsbGVyIGJlYXVjb3VwIHBsdXMgbG9pbi4NCg0KLSBQYXJ0aWN1bGnDqHJlbWVudCBwdWlzc2FudCBwb3VyIGxlIG5ldHRveWFnZSBkZSB0YWJsZSBkZSBkb25uw6llcyBhdmVjIGR1IGNvbnRlbnUgdGV4dHVlbC4NCg0KLSAqKlJlcHJvZHVjdGliaWxpdMOpKiohIFBlcm1ldCBkZSBnYXJkZXIgdW4gaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIG1hbmlwdWxhdGlvbnMgZWZmZWN0dcOpZXMgc3VyIHNlcyBkb25uw6llcyBhZmluIGRlIGxlcyBwYXJ0YWdlciwgZGUgbGVzIHLDqXV0aWxpc2VyIHN1ciBkJ2F1dHJlcyBkb25uw6llcy4uLg0KDQo8L2JyPg0KDQoNCioqKg0KDQoNCiMgMy4gSW5zdGFsbGF0aW9uIGV0IGZvbmN0aW9ubmVtZW50IGfDqW7DqXJhbA0KDQotIExlIGZvbmN0aW9ubmVtZW50IGQnT3BlblJlZmluZSBwZXV0IMOqdHJlIHVuIHBldSBkw6lyb3V0YW50IGF1IGTDqXBhcnQgY2FyIGlsIG4neSBhIHBhcyBkJ2luc3RhbGxhdGlvbiBlbiBib25uZSBldCBkdWUgZm9ybWUgY29tbWUgcG91ciB1biBsb2dpY2llbCByw6lndWxpZXIuDQoNCi0gW1TDqWzDqWNoYXJnZXIgZXQgZMOpemlwcGVyXShodHRwczovL29wZW5yZWZpbmUub3JnL2Rvd25sb2FkLmh0bWwpIGxlIGxvZ2ljaWVsIGRhbnMgdW4gZG9zc2llciBkZSBzb24gY2hvaXguDQoNCi0gQ3LDqcOpIGVuIGxhbmdhZ2UgSmF2YSBbZG9uYyBuw6ljZXNzaXRlIGwnaW5zdGFsbGF0aW9uIGRlIEphdmEgKDY0IGJpdHMgZGUgcHLDqWbDqXJlbmNlKV0oaHR0cHM6Ly93d3cuamF2YS5jb20vZW4vZG93bmxvYWQvKS4NCg0KLSBOYXZpZ2F0ZXVycyDDoCBwcml2aWzDqWdpZXI6IENocm9tZSwgT3BlcmEsIEVkZ2UuIEZpcmVmb3ggcGV1dCBwb3NlciBwcm9ibMOobWUgKG5lIGZvbmN0aW9ubmUgcGFzIGRhbnMgSUUpLiAgDQoNCi0gUG91ciBkw6ltYXJyZXIgbGUgbG9naWNpZWwsIGNsaXF1ZXIgc3VyIGxlIGZpY2hpZXIgYGAgYG9wZW5yZWZpbmUuZXhlYCBgYCBvdSBgcmVmaW5lLmJhdGAuIElsIGVzdCB1dGlsZSBkZSBmYWlyZSB1biBjbGljLWRyb2l0IHN1ciBsZSBmaWNoaWVyIC5leGUgcG91ciBsJ8OpcGluZ2xlciBkYW5zIHNhIGJhcnJlIGRlIHTDomNoZXMgKHN1ciBNYWMsIGTDqXBsYWNlciBsJ2ljw7RuZSBPcGVuUmVmaW5lIGRhbnMgbGUgZG9zc2llciBkJ2FwcGxpY2F0aW9ucyBldCBkb3VibGUgY2xpcXVlciBzdXIgY2VsbGUtY2kpLg0KDQotIFVuZSBmZW7DqnRyZSBkZSBjb21tYW5kZSBub2lyZSBzJ291dnJpcmEgZXQgbGFuY2VyYSBsJ291dmVydHVyZSBkJ3VuIG9uZ2xldCBkYW5zIGxlIG5hdmlnYXRldXIgd2ViLiAgDQoNCi0gTGEgZmVuw6p0cmUgZGUgY29tbWFuZGVzIHBldXQgZW5zdWl0ZSDDqnRyZSBpZ25vcsOpZSBtYWlzIE5FIFBBUyBMQSBGRVJNRVIhIEVsbGUgbmUgc2VydmlyYSBxdSfDoCBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsLiAgDQoNCi0gU2kgbGUgbmF2aWdhdGV1ciBuZSBzJ291dnJlIHBhcyBhdXRvbWF0aXF1ZW1lbnQsIHNhaXNpciBsJ2FkcmVzc2UgaHR0cDovLzEyNy4wLjAuMTozMzMzLyBvdSBodHRwOi8vbG9jYWxob3N0OjMzMzMgZGFucyB1biBvbmdsZXQuIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxNy5qcGcpe3dpZHRoPTgwJX0NCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4xLiBUcmF2YWlsIGxvY2FsDQoNCi0gUmVwb3NlIGRvbmMgc3VyIGRldXggY29tcG9zYW50ZXM6IHVuICoqc2VydmV1ciB3ZWIgbG9jYWwqKiBldCB1biAqKm9uZ2xldCBkZSBuYXZpZ2F0ZXVyIHdlYioqIHBvaW50YW50IHZlcnMgbCdhZHJlc3NlIGR1IHNlcnZldXIgc3VyIHNvbiBwb3N0ZS4NCg0KLSBMZSB0cmF2YWlsIHNlIGZhaXQgZGFucyB1biBvbmdsZXQgZGUgbmF2aWdhdGV1ciBxdWkgZXN0IHVuZSBzaW1wbGUgaW50ZXJmYWNlIGdyYXBoaXF1ZSBwb3VyIGludGVyYWdpciBhdmVjIGNlIHNlcnZldXIgbG9jYWwsIG1haXMgKipsZXMgZG9ubsOpZXMgbmUgc29udCBwYXMgc3VyIGxlICJudWFnZSIqKi4NCg0KLSBUcmF2YWlsIGxvY2FsIGRvbmMgcGFzIGQnZW52aXJvbm5lbWVudCBjb2xsYWJvcmF0aWYuIA0KDQotIExlcyBmaWNoaWVycyBwcm9ncmFtbWVzIHNlIHRyb3V2ZXJvbnQgZGFucyBsZSBkb3NzaWVyIGQnaW5zdGFsbGF0aW9uIGV0IGxlcyBmaWNoaWVycyBkZSBwcm9qZXRzIGRhbnMgbGUgKndvcmtzcGFjZSBkaXJlY3RvcnkqLg0KDQotIE9wZW5SZWZpbmUgbmUgbW9kaWZpZSBwYXMgbGUgZmljaGllciBvcmlnaW5hbCwgaWwgdHJhdmFpbGxlIMOgIHBhcnRpciBkJ3VuZSAqKmNvcGllIGVuIG3DqW1vaXJlIHN0b2Nrw6llIGVuIGFyY2hpdmVzKiogZGFucyBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsLg0KDQotIExlIHByb2pldCBlc3QgZW5yZWdpc3Ryw6kgZW4gZm9ybWF0IE9wZW5SZWZpbmUgYXV0b21hdGlxdWVtZW50IGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsIMOgIHRvdXRlcyBsZXMgNSBtaW51dGVzIChbcGV1dCDDqnRyZSBtb2RpZmnDqV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ydW5uaW5nI2p2bS1wcmVmZXJlbmNlcykpLg0KDQotIExlIGZpY2hpZXIgZGUgZG9ubsOpZXMgdW5lIGZvaXMgbmV0dG95w6kgcG91cnJhIMOqdHJlIGV4cG9ydMOpIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgZXQgbCdoaXN0b3JpcXVlL3N5bnRheGUgcG91cnJhIMOqdHJlIGV4dHJhaXQgZW4gZm9ybWF0IEpTT04gZXQgZW5yZWdpc3Ryw6kgZGFucyB1biBmaWNoaWVyIC50eHQuDQoNCi0gUG91ciBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsIGNvcnJlY3RlbWVudCwgZmFpcmUgYEN0cmwgKyBjYCBkYW5zIGZlbsOqdHJlIGRlIGNvbW1hbmRlIChwZXV0IMOqdHJlIG7DqWNlc3NhaXJlIGRlIGxlIGZhaXJlIHBsdXMgZCd1bmUgZm9pcykgPSBlbnJlZ2lzdHJlIGxlIHByb2pldCBldCBmZXJtZSBsZSBzZXJ2ZXVyLg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KKirDgCBub3RlcioqICANCi0gUGVybWV0IGRlIHRyYXZhaWxsZXIgc3VyIGRlIGdyb3MgZmljaGllcnMgbWFpcyBsYSB0YWlsbGUgcG9zc2libGUgZXN0IHRvdXQgZGUgbcOqbWUgbGltaXTDqWUsIGxhIHBlcmZvcm1hbmNlIHBldXQgZGV2ZW5pciBwcm9ibMOpbWF0aXF1ZSDDoCBwbHVzaWV1cnMgY2VudGFpbmVzIGRlIG1pbGxpZXJzIGRlIGxpZ25lcyAodG91dCBkw6lwZW5kYW50IGR1IG5vbWJyZSBkZSBjb2xvbm5lcykgZG9uYyBwYXMgdnJhaW1lbnQgZMOpdmVsb3Bww6kgcG91ciBmYWlyZSBkdSBiaWcgZGF0YS4NCi0gVHJhdmFpbGxlIGF2ZWMgMUdvIGRlIG3DqW1vaXJlIHBhciBkw6lmYXV0LiDDgCBwbHVzIGRlIDEwMCAwMDAgbGlnbmVzLCBpbCBwZXV0IMOqdHJlIHByw6lmw6lyYWJsZSBkJ1thdWdtZW50ZXIgbGEgbcOpbW9pcmVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvaW5zdGFsbGluZyNpbmNyZWFzaW5nLW1lbW9yeS1hbGxvY2F0aW9uKSBkZSB0cmF2YWlsOiAgDQogIC0gT3V2cmlyIGxlIGZpY2hpZXIgcmVmaW5lLmluaSBkYW5zIG5vdGVwYWQgZXQgbW9kaWZpZXIgbGEgbGlnbmUgUkVGSU5FX01FTU9SWSA9IHBhcmFtZXRyZS4gIA0KICAtIFBhciBsYSBzdWl0ZSBsYW5jZXIgT1IgYXZlYyBsZSBmaWNoaWVyICpyZWZpbmUuYmF0KiBldCBub24gKm9wZW5yZWZpbmUuZXhlICouICAgDQoNCjwvZGl2Pg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4yLiDDiWNyYW4gZCdhY2N1ZWlsDQoNCi0gw4AgcGFydGlyIGR1IG1lbnUgZGUgZ2F1Y2hlLCBpbCBlc3QgcG9zc2libGUgZGUgYENyw6llciB1biBwcm9qZXRgLCBgT3V2cmlyIHVuIHByb2pldGAgKGhpc3RvcmlxdWUgZGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzKSBvdSBgSW1wb3J0ZXIgdW4gcHJvamV0IGAgKGFyY2hpdmVzIC56aXAgc2UgdHJvdXZhbnQgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwpLiAgIA0KDQotIFBvdXIgY2hhbmdlciBsYSBsYW5ndWUgZGUgbCdpbnRlcmZhY2UgYXUgZnJhbsOnYWlzLCBjbGlxdWVyIHN1ciBsJ29uZ2xldCBgTGFuZ3VlYCBkYW5zIGxlIG1lbnUgZGUgZ2F1Y2hlLiAgDQoNCi0gTGUgZmljaGllciBwZXV0IMOqdHJlIGNyw6nDqSDDoCBwYXJ0aXIgZGUgZGlmZsOpcmVudGVzIHNvdXJjZXM6IGBDZXQgb3JkaW5hdGV1cmAgKHBvc3RlIGxvY2FsKSwgYEFkcmVzc2VzIHdlYiAoVVJMcylgLCBgUHJlc3NlLXBhcGllcmAgKGNvcGnDqS1jb2xsw6kpLCBgR29vZ2xlIGRhdGFgIChHb29nbGUgc2hlZXRzKS4uLikgZXQgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyAoLmNzdiwgLnR4dCwgLnhtbCwgLnhscywgLkpTT04sIC56aXAuLi4gKGNlcnRhaW5lcyBleHRlbnNpb25zIHBlcm1ldHRlbnQgbCd1c2FnZSBkJ2F1dHJlcyBmb3JtYXRzIGNvbW1lIHJkZikuICANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMS5qcGcpICANCg0KPC9jZW50ZXI+ICANCg0KLSBEZXV4IGZpY2hpZXJzIG91IHBsdXMgcGV1dmVudCDDqnRyZSBpbXBvcnTDqXMgZW4gbcOqbWUgdGVtcHMuIExlcyBsaWduZXMgc2Vyb250IGltcG9ydMOpZXMgdW5lIMOgIGxhIHN1aXRlIGRlIGwnYXV0cmUgc2Vsb24gbCdvcmRyZSBkJ2ltcG9ydGF0aW9uICh1bmUgY29sb25uZSBwZXJtZXR0YW50IGQnaWRlbnRpZmllciBsZSBmaWNoaWVyIHNvdXJjZSBzZXJhIGNyw6nDqWUgYXV0b21hdGlxdWVtZW50KS4gDQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDMuMy4gSGlzdG9yaXF1ZSBkZXMgcHJvamV0cw0KDQotIEwnb25nbGV0IGBPdXZyaXIgdW4gcHJvamV0YCBwZXJtZXQ6DQogIC0gRCdhY2PDqWRlciBldCBkJ291dnJpciB0b3VzIGxlcyBwcm9qZXRzIGVucmVnaXN0csOpcyBsb2NhbGVtZW50Lg0KICAtIEQnw6lkaXRlciBzZXMgbcOpdGFkb25uw6llcy4NCiAgLSBEJ2FjY8OpZGVyIGF1IGRvc3NpZXIgZGUgdHJhdmFpbCAoZMOpZmluaSBwYXIgZMOpZmF1dCkgb8O5IE9wZW5SZWZpbmUgc3RvY2tlIGxlcyBhcmNoaXZlcyBkZXMgcHJvamV0cyBlbnJlZ2lzdHLDqXMgcGFyIGxlIGJpYWlzIGR1IGxpZW4gYFBhcmNvdXJpciBsZSBkb3NzaWVyIGRlIGwnZXNwYWNlIGRlIHRyYXZhaWxgLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IzLmpwZykNCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyA0LiBDcsOpZXIgdW4gcHJvamV0DQoNCi0gUG91ciBvdXZyaXIgdW4gZmljaGllciDDoCBwYXJ0aXIgZGUgc29uIHBvc3RlLCBjbGlxdWVyIHN1ciBgQ3LDqWVyIHVuIHByb2pldGAgLSA+IGBDZXQgb3JkaW5hdGV1cmAgLSA+IGBzw6lsZWN0aW9ubmVyIGZpY2hpZXJzYCBzdXIgc29uICBwb3N0ZSAtPiBgU3VpdmFudGAuICANCg0KLSBVbmUgZmVuw6p0cmUgcydvdXZyZSBlbnN1aXRlIHBvdXIgcGVybWV0dHJlIGRlIHByw6ktdmlzdWFsaXNlciBzb24gamV1IGRlIGRvbm7DqWVzIGV0IGRlIG1vZGlmaWVyLCBzaSBuw6ljZXNzYWlyZSwgbGVzIG9wdGlvbnMgZCdpbXBvcnRhdGlvbiBlbiBmb25jdGlvbiBkZXMgY2FyYWN0w6lyaXN0aXF1ZXMgZHUgZmljaGllciBkZSBkb25uw6llczogbW9kaWZpY2F0aW9uIGR1IGZvcm1hdCBkZSBmaWNoaWVyIHMnaWwgbidhIHBhcyDDqXTDqSBpZGVudGlmacOpIGNvcnJlY3RlbWVudCBbNV0sIGwnZW5jb2RhZ2UgZGVzIGNhcmFjdMOocmVzIFtVVEYtOF0gWzZdLCBsZSB0cmFpdGVtZW50IGRlcyBlbnTDqnRlcyBldCBwcmVtacOocmVzIGxpZ25lcyBbOV0uLi4NCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjIuanBnKSAgDQoNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQ3LDqWVyIHVuIG5vdXZlYXUgcHJvamV0IGVuIGltcG9ydGFudCB1biBmaWNoaWVyIMOgIHBhcnRpciBkZSBzb24gZW1wbGFjZW1lbnQgc3VyIEdpdGh1YjogaHR0cHM6Ly9naXRodWIuY29tL0NSTE5QL29wZW5yZWZpbmUgDQogIC0gQ2xpcXVlciBzdXIgbGUgZmljaGllciAqSW5jaWRlbnRzIG3DqXRyby1tdGwuY3N2KiAtPiBDbGlxdWVyIHN1ciBsZSBib3V0b24gUkFXIC0+IGNvcGllciBsJ2FkcmVzc2UgZHUgbmF2aWdhdGV1ci4NCiAgLSBEYW5zIE9wZW5SZWZpbmUsIENyw6llciB1biBwcm9qZXQgLT4gQWRyZXNzZXMgd2ViIChVUkxzKSAtPiBjb2xsZXIgbGUgbGllbiAtPiBTdWl2YW50Lg0KKExlIGZpY2hpZXIgZXN0IGF1c3NpIGRpc3BvbmlibGUgc3VyIGxlIHNpdGUgW0Rvbm7DqWVzIG91dmVydGVzIE1vbnRyw6lhbF0oaHR0cHM6Ly9kb25uZWVzLm1vbnRyZWFsLmNhL3NvY2lldGUtZGUtdHJhbnNwb3J0LWRlLW1vbnRyZWFsL2luY2lkZW50cy1kdS1yZXNlYXUtZHUtbWV0cm8pKS4gICAgIA0KDQotIEV4cGxvcmVyIGxlcyBvcHRpb25zIGQnaW1wb3J0YXRpb24gLT4gUG9ydGVyIHVuZSBhdHRlbnRpb24gcGFydGljdWxpw6hyZSBhdXggb3B0aW9uczogYFN1cHByaW1lciBsZXMgZXNwYWNlc2AgKDggLT4gY29jaGVyKSwgCWBVdGlsaXNlciBsZSBjYXJhY3TDqHJlCSIgLi4uYCAoMTAgLT4gKipjb2NoZXIqKiksIGBBbmFseXNlciBsZSB0ZXh0ZSBkZXMgY2VsbHVsZXMgY29tbWUgbm9tYnJlcyAsIGRhdGVz4oCmYCAoMTEgLT4gZMOpY29jaGVyKQ0KDQotIENoYW5nZXIgbGUgYE5vbSBkdSBwcm9qZXRgIFsyXSBldCBjbGlxdWVyIHN1ciBgQ3LDqWVyIHVuIHByb2pldGAgWzRdIC0gRW4gY2FzIGRlIHByb2Jsw6htZSwgaWwgZXN0IHBvc3NpYmxlIGRlIHJlY29tbWVuY2VyIGxlIHByb2Nlc3N1cyBbMV0uDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyA1LiBFeHBsb3JlciBsJ2ludGVyZmFjZQ0KDQotIEwnaW50ZXJmYWNlIGVzdCBzaW1pbGFpcmUgw6AgRXhjZWwgbWFpcyBvbiBuZSBwZXV0IHZvaXIgbCdlbnNlbWJsZSBkZXMgbGlnbmVzLCBsYSAibG9naXF1ZSIgZCdPcGVuUmVmaW5lIHJlcG9zZSBzdXIgbGUgdHJhdmFpbCBlbiAqKmNvbG9ubmVzKiouDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjQuanBnKSANCg0KPC9jZW50ZXI+ICANCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4gIA0KDQpbMV0gTGllbiBzb3VzIGwnaWPDtG5lIHJlbnZvaSB2ZXJzIGxhIHBhZ2UgZCdhY2N1ZWlsL2ltcG9ydGF0aW9uLiAgDQpbMl0gUmVub21tZXIgbGUgbm9tIGRlIHNvbiBwcm9qZXQgZW4gdG91dCB0ZW1wcy4gIA0KWzNdIFBlcm1hbGllbiBxdWkgcGVybWV0IGRlIHJldmVuaXIgw6AgdW5lIHZ1ZSBwcsOpY2lzZSAoYWZmaWNoYWdlLCB0cmksIGZhY2V0dGVzLi4uKSBkdSBwcm9qZXQuICANCls0XSBOb21icmUgZGUgbGlnbmVzL29ic2VydmF0aW9ucyBkdSBmaWNoaWVyLiAgDQpbNV0gQ2hhbmdlbWVudCBkdSBtb2RlIGxpZ25lcyBvdSBvYnNlcnZhdGlvbnMuICANCls2XSBNb2RpZmllciBsZSBub21icmUgZGUgbGlnbmVzIGFmZmljaMOpZXMuICANCls3XSBQYXNzZXIgZCd1bmUgcGFnZSDDoCBsJ2F1dHJlLiAgDQpbOF0gT3V2cmlyIHVuIG5vdXZlbCBvbmdsZXQgT3BlblJlZmluZS4gIA0KWzldIEV4cG9ydGVyIGxlIGZpY2hpZXIgZW4gZGlmZsOpcmVudHMgZm9ybWF0cy4gIA0KDQo8L2Rpdj4gIA0KDQo8L2JyPiAgDQoNCiMjIDUuMSBEZXV4IHZ1ZXMgZGVzIGRvbm7DqWVzDQoNCi0gT3BlblJlZmluZSBwcm9wb3NlIGRldXggdnVlcyBkZXMgZG9ubsOpZXM6IGBsaWduZXNgIGV0IGBlbnRyw6llcy5gIExlcyBkb25uw6llcyBzb250IGfDqW7DqXJhbGVtZW50IHByw6lzZW50w6llcyBlbiBtb2RlIGBsaWduZXNgLCBjJ2VzdC3DoC1kaXJlIGNoYXF1ZSBsaWduZSByZXByw6lzZW50ZSB1bmUgb2JzZXJ2YXRpb24uIExlIG1vZGUgYGVudHLDqWVzYCBwZXJtZXQgZCdhc3NvY2llciBwbHVzaWV1cnMgbGlnbmVzIMOgIHVuZSBvYnNlcnZhdGlvbi4NCg0KLSBJbCBlc3QgZG9uYyBwb3NzaWJsZSBkZSBtb2RpZmllciBsYSBzdHJ1Y3R1cmUgZHUgZmljaGllciBwb3VyIHF1ZSBwbHVzaWV1cnMgbGlnbmVzIHNvaWVudCBhc3NvY2nDqWVzIMOgIHVuIHNldWwgY2FzIGVuIHNlIGJhc2FudCBzdXIgbGEgY29sb25uZSBjbMOpICgqKnNldWxlIGxhIGxpZ25lIG9yaWdpbmFsZSBzZXJhIG51bcOpcm90w6llKiopLCBtYWlzIGRvaXQgc2UgZmFpcmUgYXZlYyBwcsOpY2F1dGlvbnMuIFBvdXIgbGVzIGxvZ2ljaWVscyBkJ2FuYWx5c2UsIGxlIGZvcm1hdCAqdGlkeSogKGBsaWduZXNgKSBlc3Qgw6AgcHJpdmlsw6lnaWVyLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I0MC5qcGcpDQoNCjwvY2VudGVyPiAgDQoNCioqKg0KDQoNCiMjIDUuMi4gTCfDqWRpdGlvbiBkZSBjZWxsdWxlcw0KDQotIElsIGVzdCBwb3NzaWJsZSBkJ8OpZGl0ZXIgbWFudWVsbGVtZW50IGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgaW5kaXZpZHVlbGxlcyBlbiBzZSBwbGHDp2FudCBzdXIgY2hhY3VuZSBldCBlbiBjbGlxdWFudCBgZWRpdGAsIG1haXMgT3BlblJlZmluZSBwcml2aWzDqWdpZSBsZSAqKnRyYXZhaWwgZW4gbG90IHBhciBjb2xvbm5lcyoqIHBvdXIgZmlsdHJlciwgdHJpZXIsIHRyYW5zZm9ybWVyLg0KDQotIEwnw6lkaXRpb24gZGlyZWN0ZSBwZXV0IHMnYXBwbGlxdWVyIGluZGl2aWR1ZWxsZW1lbnQgb3Ugc3VyIHRvdXRlcyBsZXMgY2VsbHVsZXMgYXZlYyBsYSBtw6ptZSB2YWxldXIgZGFucyBjZXR0ZSBjb2xvbm5lLg0KDQotIFBlcm1ldCDDqWdhbGVtZW50IGRlIG1vZGlmaWVyIGxlIGZvcm1hdCBkZSBsYSBjZWxsdWxlLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IyMi5qcGcpe3dpZHRoPTgwJX0NCg0KPC9jZW50ZXI+ICANCg0KDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIERhbnMgbGEgY29sb25uZSAqQ2F1c2UgcHJpbWFpcmUqIGNsaXF1ZXIgZGFucyB1bmUgY2VsbHVsZSAqQXV0cmVzKiwgw6lkaXRlciBzb24gY29udGVudSBwb3VyICphdXRyZSogZXQgYXBwbGlxdWVyIMOgIGxhIGNlbGx1bGUuIA0KDQotIERhbnMgbGEgY29sb25uZSAqw4l2YWN1YXRpb24qLCBtb2RpZmllciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgIiMiIHBhciAqTm9uKiBldCBhcHBsaXF1ZXIgw6AgdG91dGVzIGxlcyBjZWxsdWxlcyBpZGVudGlxdWVzLg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDUuMy4gRm9ybWF0IGRlcyBkb25uw6llcyAgDQoNCg0KIyMjIyBUcm9pcyBmb3JtYXRzIGRlIGJhc2U6IA0KICAxLiBDaGHDrm5lIGRlIGNhcmFjdMOocmVzDQogIDIuIE5vbWJyZQ0KICAzLiBEYXRlIChub3JtZSBJU08tODYwMSBZWVlZLU1NLUREVEhIOk1NOlNTWikqDQogIA0KICANCiMjIyMgRGV1eCBmb3JtYXRzIGTDqWNvdWxhbnQgZCdhY3Rpb25zOiANCiAgLSBFcnJldXIgKGZvcm1hdCBhdHRyaWJ1w6kgc3VpdGUgw6AgdW5lIGVycmV1ciBkZSB0cmFuc2Zvcm1hdGlvbikgIA0KICAtIE51bGwqKg0KDQoNCiMjIyMgRGV1eCBhdXRyZXMgdHlwZXMgcGFydGljdWxpZXJzIGTDqWNvdWxhbnQgZGUgbWFuaXB1bGF0aW9ucw0KICAtIEJvb2zDqWVuICh2YWxldXIgYmluYWlyZSBUIG91IEYpDQogIC0gKkFycmF5KiAobGlzdGUgZGUgdmFsZXVycyBzw6lwYXLDqWVzIHBhciB1bmUgdmlyZ3VsZSBlbnRyZSBjcm9jaGV0cyBwb3V2YW50IMOqdHJlIHRyYW5zZm9ybcOpZXMpDQoNCjwvYnI+DQoNCiMjIyMjICogRm9ybWF0IGRhdGUNCg0KLSBTZWxvbiBsZXMgYmVzb2lucywgbGVzIGRhdGVzIHBldXZlbnQgw6p0cmUgdHJhaXTDqWVzIHNvdXMgZm9ybWUgZGUgYHRleHRlYCwgZGUgYG5vbWJyZWAgb3UgYGRhdGVgIChsZSBmb3JtYXQgZGF0ZSBlc3Qgc3VydG91dCBuw6ljZXNzYWlyZSBwb3VyIGxlcyBjYWxjdWxzIGRlIGRhdGVzKS4NCi0gTGUgZm9ybWF0IGRhdGUgcmVwb3NlIHN1ciB1bmUgc8OpcmllIGQnb3V0aWxzIGV0IGRlICBzdGFuZGFyZHMgcG91ciByZWNvbm5haXRyZSBldCBjb252ZXJ0aXIgbGVzIHZhbGV1cnMgb3JpZ2luYWxlcyBlbiBkYXRlLiANCi0gUG91ciBxdSd1bmUgY2VsbHVsZSBzb2l0IHJlY29ubnVlIGNvbW1lIGRhdGUsIGVsbGUgc2VyYSB0cmFuc2Zvcm3DqWUgYXUgZm9ybWF0ICpJU08tODYwMS1jb21wbGlhbnQqLg0KLSBQb3NzaWJsZSBkZSBtb2RpZmllciBjZSBmb3JtYXQgcG91ciBxdSdpbCBzb2l0IHBsdXMgZmFjaWxlbWVudCBsaXNpYmxlIMOgIGwnZXhwb3J0YXRpb24uDQoNCg0KIyMjIyMgKiogRm9ybWF0ICJtYW5xdWFudCINCg0KLSBPcGVuUmVmaW5lIGZhaXQgdW5lIGRpc3RpbmN0aW9uIGVudHJlIGxlcyAqKmNlbGx1bGVzIHZpZGVzIGF2ZWMgZXNwYWNlcyBibGFuY3MqKiAocXVpIG5lIHNvbnQgcGFzIHZpZGVzISksIGxlcyAqKnZhbGV1cnMgdmlkZXMqKiAoY2hhaW5lIGRlIGxvbmd1ZXVyIDApLCBldCBsZXMgKip2YWxldXJzICJudWxsIioqICh0eXBlIHNww6ljaWFsIHF1aSBuJ2VzdCBwYXMgdW5lIGNoYWluZSBkZSBjYXJhY3TDqHJlcykuIExlcyAqdmlkZXMqIGV0IGxlcyAqbnVsbCogc29udCBhdXNzaSBjb25zaWTDqXLDqXMgY29tbWUgKkJsYW5rKi4NCi0gUGx1c2lldXJzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIHNvdXMgYEZhY2V0dGVzYCBldCBgw4lkaXRlciBsZXMgY2VsbHVsZXNgIHBlcm1ldHRlbnQgZGUgZ8OpcmVyIGNlcyB0eXBlcyBkZSB2YWxldXJzLg0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQoqKlRyYW5zZm9ybWVyIHVuZSBjb2xvbm5lIGRlIGZvcm1hdCBjYXJhY3TDqHJlIGVuIGZvcm1hdCBkYXRlKio6ICANCi0gRGFucyBsYSBjb2xvbm5lICpKb3VyIGNhbGVuZGFpcmUqOiBgTWVudSAtPiDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IEVuIGRhdGVgICAgIA0KDQoqKlRyYW5zZm9ybWVyIHVuZSBjb2xvbm5lIGRlIGZvcm1hdCBjYXJhY3TDqHJlIGVuIGZvcm1hdCBub21icmUqKjogICANCi0gRGFucyBsYSBjb2xvbm5lICpQb3J0ZSosIGNsaXF1ZXIgZGFucyB1bmUgY2VsbHVsZSwgw6lkaXRlciBsZSBmb3JtYXQgw6AgKk5vbWJyZSogZXQgYXBwbGlxdWVyIMOgIHRvdXRlcyBsZXMgY2VsbHVsZXMgaWRlbnRpcXVlcy4NCi0gUmVjb21tZW5jZXIgbGEgcHJvY8OpZHVyZSBhdmVjIGxlIGZvbmN0aW9uICpUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzKi4NCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQotIMOAIGwnaW1wb3J0YXRpb24gZCd1biBmaWNoaWVyLCBjaGFxdWUgY2VsbHVsZSBzZSB2ZXJyYSBhdHRyaWJ1ZXIgdW4gZm9ybWF0LiANCi0gUGFyIGTDqWZhdXQsIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVzdCBkZSBmb3JtYXQgY2hhw65uZXMuICANCi0gTGUgY29udGVudSBkZXMgY2VsbHVsZXMgcmVjb25udSBjb21tZSBudW3DqXJpcXVlIGV0IGRhdGUgc2VyYSBkZSBjb3VsZXVyIHZlcnRlLiAgDQotIExlIGZvcm1hdCBwZXV0IMOqdHJlIG1vZGlmacOpIGRlIGRpZmbDqXJlbnRlcyBmYcOnb25zOiBCb3V0b24gYGVkaXRgLCBgVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlc2AsIEZlbsOqdHJlIEdSRUwuICANCi0gQ2UgZm9ybWF0IGF1cmEgdW4gaW1wYWN0IHN1ciBsZXMgYWN0aW9ucyBwb3NzaWJsZXMuICANCi0gTGUgY2hhbmdlbWVudCBkZSBmb3JtYXQgcGFyIMOpZGl0aW9uIGRpcmVjdGUgZCd1bmUgY2VsbHVsZSBlc3QgdW5lIG9ww6lyYXRpb24gZGlzdGluY3RlIGRlIGxhIHRyYW5zZm9ybWF0aW9uIGR1IGNvbnRlbnUuIExhIHByZW1pw6hyZSBvcMOpcmF0aW9uIGFycml2ZSBwYXJmb2lzIMOgIGNoYW5nZXIgZGVzIGZvcm1hdHMgcXVlIGxhIHRyYW5zZm9ybWF0aW9uIG5lIHBldXQgZmFpcmUuDQotIFBvdXIgcGx1cyBkJ2luZm9ybWF0aW9uIHN1ciBsZXMgZm9ybWF0cywgdm9pciBsYSBbZG9jdW1lbnRhdGlvbiBvZmZpY2llbGxlXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2V4cGxvcmluZykuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyA1LjQuIExhIGdlc3Rpb24gZGVzIGxpZ25lcyBldCBjb2xvbm5lcw0KDQojIyMjIExhIGdlc3Rpb24gZGVzIGNvbG9ubmVzIHBldXQgc2UgZmFpcmU6DQoNCi0gU3VyIGNoYXF1ZSBjb2xvbm5lOiANCiAgLSBGb25jdGlvbnMgc291cyBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IETDqXBsYWNlciAuLi4gLyBSZW5vbW1lciAvIFN1cHByaW1lcmAgICANCiAgLSBGb25jdGlvbnMgc291cyBgQXBlcsOndSAtPiBNYXNxdWVyLi4uIGAgICANCg0KPC9icj4NCg0KLSBTdXIgbGEgY29sb25uZSBgVG91dGVzYDogICAgIA0KICAtIGDDiWRpdGVyIGxlcyBjb2xvbm5lcyAtPiBSZXRyaWVyLXN1cHByaW1lciwgZ2VzdGlvbiBkZXMgdmFsZXVycyBjb25zw6ljdXRpdmVzYCAgICANCiAgLSBgQXBlcsOndSAtPiBBZmZpY2hlci1tYXNxdWVyYC4uLiAgDQoNCjwvYnI+DQoNCiMjIyMgTGEgZ2VzdGlvbiBkZXMgbGlnbmVzOg0KDQotIExhIHPDqWxlY3Rpb24gZGUgbGlnbmVzIHBldXQgc2UgZmFpcmUgcGFyIGxlIGJpYWlzIGRlIGZpbHRyZXMsIGZhY2V0dGVzIGV0IGF1dHJlcyBtYW5pcHVsYXRpb25zIHBlcnNvbm5hbGlzw6llcy4gIA0KLSBJbCBlc3QgYXVzc2kgcG9zc2libGUgZGUgbWFycXVlci/DqXRvaWxlciBkZXMgbGlnbmVzIGVuIGxvdCBvdSBpbmRpdmlkdWVsbGVtZW50IHB1aXMgZGUgY3LDqWVyIHVuZSBmYWNldHRlIHN1ciBsYSBjb2xvbm5lIGBUb3V0ZXNgIHBvdXIgc8OpbGVjdGlvbm5lciBsZXMgbGlnbmVzIG1hcnF1w6llcyAoYHRydWVgKS4gIA0KLSBPbiBwZXV0IGVuc3VpdGUgc3VwcHJpbWVyIGxlcyBsaWduZXMgZmlsdHLDqWVzOiBgVG91dGVzIC0+IMOJZGl0ZXIgbGVzIGxpZ25lcyAtPiBTdXBwcmltZXIgbGVzIGxpZ25lcyBjb3JyZXNwb25kYW50ZXNgLiAgDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlN1cHByaW1lciB1bmUgY29sb25uZTogKiogIA0KLSBTdXIgbGEgY29sb25uZSAqVHlwZSBkJ2luY2lkZW50KiAtPiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IFN1cHByaW1lciBjZXR0ZSBjb2xvbm5lYC4gIA0KDQoqKlN1cHByaW1lciBwbHVzaWV1cnMgY29sb25uZXM6ICoqICANCi0gU3VyIGxhIGNvbG9ubmUgKlRvdXRlcyogLT4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiDDiWRpdGVyL1N1cHByaW1lciBsZXMgY29sb25uZXNgIC0+ICpLRlMqIGV0ICpDQVQqLiAgDQoNCjwvZGl2Pg0KDQoqKioNCg0KDQojIyA1LjUuIEhpc3RvcmlxdWUgKFVuZG8vUmVkbykNCg0KLSBUb3V0ZXMgbGVzIGFjdGlvbnMgc29udCBlbnJlZ2lzdHLDqWVzIChsb2cgZGUgc2VzIG1hbmlwdWxhdGlvbnMpIGV0IHBldXZlbnQgw6p0cmUgYW5udWzDqWVzIGVuIHJlY3VsYW50IMOpdGFwZSBwYXIgw6l0YXBlIGRhbnMgbCdoaXN0b3JpcXVlLiAgDQotIExhIHByZW1pw6hyZSBhY3Rpb24gZCd1biBoaXN0b3JpcXVlIGVzdCBsYSBjcsOpYXRpb24gZHUgcHJvamV0LiAgDQotIFB1aXNxdWUgbCdoaXN0b3JpcXVlIGZhaXQgcGFydGllIGR1IHByb2pldCBlbnJlZ2lzdHLDqSBkYW5zIGxlIGRvc3NpZXIgZGUgdHJhdmFpbCwgaWwgbmUgZGlzcGFyYWl0IHBhcyDDoCBsYSBmZXJtZXR1cmUgZGUgbGEgc2Vzc2lvbi4gDQotIEwnaGlzdG9yaXF1ZSBwZXV0IMOqdHJlIGV4dHJhaXQgZW4gZm9ybWF0IEpTT04sIGNvcGllci9jb2xsZXIgZGFucyBub3RlcGFkIGV0IGFwcGxpcXVlciBkZSBub3V2ZWF1LiAgDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjE5LmpwZyl7d2lkdGg9NjAlfQ0KDQo8L2NlbnRlcj4gIA0KDQoqKkF0dGVudGlvbiEqKg0KDQotIFNpIG9uIHJlY3VsZSBkYW5zIGxlIHRlbXBzIGV0IHF1J29uIGZhaXQgdW5lIG1vZGlmaWNhdGlvbiwgbGVzIMOpdGFwZXMgcXVpIHN1aXZlbnQgZGFucyBsJ2hpc3RvcmlxdWUgZGlzcGFyYWlzc2VudCBwb3VyIGRlIGJvbi4gIA0KDQotIExlcyBtYW5pcHVsYXRpb25zIHJlbGF0aXZlcyDDoCBsJ2FmZmljaGFnZSBuZSBzb250IHBhcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbCdoaXN0b3JpcXVlLCBzZXVsZW1lbnQgbGVzIHRyYW5zZm9ybWF0aW9ucy4gTCdlbnJlZ2lzdHJlbWVudCBhdXRvbWF0aXF1ZSBuZSBjb21wcmVuZCBkb25jIHBhcyBsZXMgZmFjZXR0ZXMgZXQgZmlsdHJlcyAodnVlIGRlIGwnaW50ZXJmYWNlKSAtIHBlcmQgY2UgcXVpIG4nYXBwYXJhaXQgcGFzIGRhbnMgbGUgYETDqWZhaXJlL1JlZmFpcmVgLg0KDQotIEwnw6lkaXRpb24gZGlyZWN0ZSBkYW5zIGxlcyBjZWxsdWxlcyBhcHBhcmFpdCBkYW5zIGwnaGlzdG9yaXF1ZSBtYWlzIG5lIHBldXQgw6p0cmUgZXhwb3J0w6llLiAgDQoNCi0gRmFjZXR0ZXMgZXQgZmlsdHJlcyBzJ2VucmVnaXN0cmVudCBncsOiY2UgYXUgYHBlcm1hbGllbmAuICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyA2LiBNZW51IGV0IGZvbmN0aW9ucw0KDQpPcGVuIFJlZmluZSBwZXJtZXQgZGUgdHJhdmFpbGxlciBkZSAqKmRldXggZmHDp29ucyoqOiAgDQoNCg0KMS4gQXZlYyBsJ2Vuc2VtYmxlIGRlcyAqKmZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzKiogcXVlIGwnb24gcmV0cm91dmUgZGFucyBsZXMgbWVudXMuDQoNCjIuIEVuIHLDqWRpZ2VhbnQgc2VzIHByb3ByZXMgW2V4cHJlc3Npb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2V4cHJlc3Npb25zKSBhdmVjIGxlICoqbGFuZ2FnZSBHUkVMKiouICANCg0KICAtIE3Dqm1lIGxvcnNxdWUgbCdvbiB1dGlsaXNlIGxlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcywgaWwgZXN0IHBvc3NpYmxlIGQnZW4gbW9kaWZpZXIgbGUgZm9uY3Rpb25uZW1lbnQgZW4gw6lkaXRhbnQgZGlyZWN0ZW1lbnQgbGEgc3ludGF4ZSBHUkVMIGNvcnJlc3BvbmRhbnRlLiANCg0KPC9icj4NCg0KIyMgNi4xLiBVdGlsaXNlciBsZXMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXM6DQoNCi0gTGUgbWVudSBldCBsJ2Vuc2VtYmxlIGRlIHNlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcyBhcHBhcmFpc3NlbnQgZW4gY2xpcXVhbnQgc3VyIGxhIGZsw6hjaGUgZGUgbCdpbnRpdHVsw6kgZGUgY2hhcXVlIGNvbG9ubmUuDQoNCi0gTGVzIGZvbmN0aW9ucyBkaXNwb25pYmxlcyBzb3VzIGxlIG1lbnUgZGUgbGEgcHJlbWnDqHJlIGNvbG9ubmUgYFRvdXRlc2Agc2UgZGlzdGluZ3VlbnQgZGVzIGF1dHJlcyBwdWlzcXUnZWxsZXMgcGVybWV0dGVudCBkJ2FwcGxpcXVlciBkZXMgZm9uY3Rpb25zIMOgIGwnZW5zZW1ibGUgZGVzIGNvbG9ubmVzIGR1IGZpY2hpZXI6IE1hcnF1ZXIsIMOpdG9pbGVyLCBzdXBwcmltZXIsIG1hc3F1ZXIuLi4NCg0KPC9icj4NCg0KKipNZW51IGV0IGZvbmN0aW9ucyBkZSBjaGFxdWUgY29sb25uZS12YXJpYWJsZSoqDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IxMi5qcGcpe3dpZHRoPTkwJX0NCg0KPC9icj4NCg0KKipNZW51IGV0IGZvbmN0aW9ucyBkZSBsYSBjb2xvbm5lIGBUb3V0ZXNgKioNCg0KIVtdKGltYWdlcy9PUjIxLmpwZyl7d2lkdGg9OTAlfQ0KDQo8L2JyPg0KDQoqKioNCg0KIyMgNi4yLiDDiWNyaXJlIHNlcyBmb25jdGlvbnMgYXZlYyBHUkVMDQoNCjwvYnI+DQoNCkV4cHJlc3Npb25zIHNpbWlsYWlyZXMgYXV4IGZvcm11bGVzIEV4Y2VsIG1haXMgcXVpIHMnYXBwbGlxdWVudCBhdXggY29sb25uZXMsIG5vbiBhdXggY2VsbHVsZXMsIGV0IHF1aSBuZSBzb250IHBhcyBzdG9ja8OpZXMgw6AgbcOqbWUgbGVzIGRvbm7DqWVzIG1haXMgZGFucyB1biBzY3JpcHQuICANCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjE0LmpwZykNCg0KPC9icj4NCg0KKipMZSBsYW5nYWdlIEdSRUwgcGV1dCBzJ3V0aWxpc2VyIGRlIGRpZmbDqXJlbnRlcyBmYcOnb25zOioqICANCg0KLSBFbiBjcsOpYW50IGRlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgOiBgRmFjZXR0ZSAtPiBGYWNldHRlIHRleHR1ZWxsZSBwZXJzb25uYWxpc8OpZWAuICANCg0KLSBFbiB0cmFuc2Zvcm1hbnQgdW5lIGNvbG9ubmU6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiB0cmFuc2Zvcm1lcmAgKGF1c3NpIHNvdXMgYFRvdXRlcyAtPiBUcmFuc2Zvcm1lcmApLiAgDQoNCi0gRW4gY3LDqWFudCB1bmUgbm91dmVsbGUgY29sb25uZTogYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGJhc8OpZSBzdXIgY2V0dGUgY29sb25uZWAuICANCg0KPC9icj4NCg0KKipMZXMgZmlsdHJlcyBldCBsZXMgdHJhbnNmb3JtYXRpb25zIHBsdXMgY29tcGxleGVzIHBldXZlbnQgYXVzc2kgbsOpY2Vzc2l0ZXIgbCd1c2FnZSBkJ1tleHByZXNzaW9ucyByw6lndWxpw6hyZXMgKHJlZ2V4KV0oaHR0cHM6Ly9yZWdleDEwMS5jb20vKSoqDQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDYuMy4gVHJpZXIgdW4gZmljaGllcg0KDQotIExlcyBkb25uw6llcyBhcHBhcmFpc3NlbnQgZGFucyBsJ29yZHJlIGR1IGZpY2hpZXIgb3JpZ2luYWwuDQotIFBvdXIgbW9kaWZpZXIgbCdvcmRyZSBkJ2FwcGFyaXRpb24gZGVzIG9ic2VydmF0aW9ucywgYXBwbGlxdWVyIHVuIG91IGRlcyB0cmlzIHN1ciBsZXMgY29sb25uZXMgYXZlYyBgVHJpZXIuLi5gDQotIFBvdXIgY29tYmluZXIgcGx1c2lldXJzIHRyaXMgc3VyIGRpZmbDqXJlbnRlcyBjb2xvbm5lczogRmFpcmUgdW4gdHJpZSBzdXIgdW5lIGNvbG9ubmUgcHVpcyBzdXIgdW5lIGF1dHJlIGVuIG1vZGlmaWFudCBzaSBuw6ljZXNzYWlyZSBsJ29wdGlvbiBgVHJpZXIgc2Vsb24gY2V0dGUgc2V1bGUgY29sb25uZWAuDQotIExlcyB0cmlzIG5lIHNvbnQgcXVlIHRlbXBvcmFpcmVzIGV0IG4nYWZmZWN0ZW50IGRvbmMgcXVlIGwnYWZmaWNoYWdlLiBQb3VyIHF1J2lscyBzb2llbnQgcGVybWFuZW50cyAocmVudW3DqXJvdGF0aW9uIGRlcyBsaWduZXMpOiBgVHJpZXIgLT4gUmV0cmllciBsZXMgbGlnbmVzIGRlIGZhw6dvbiBwZXJtYW5lbnRlYCouICANCi0gSWwgZXN0IHBvc3NpYmxlIGRlIHN1cHByaW1lciBldCBkJ2ludmVyc2VyIGxlIHRyaSDDoCBwYXJ0aXIgZGVzIG9wdGlvbnMgc3VyIGNoYXF1ZSBjb2xvbm5lIG91IGdyw6JjZSDDoCBsYSBmb25jdGlvbiBgVHJpZXJgIGR1IGhhdXQuICANCg0KICpMZSB0cmkgcGVybWFuZW50IGFmZmVjdGUgdG91dCBsZSBmaWNoaWVyLCBwYXMgc2V1bGVtZW50IGxhIHZ1ZSBmaWx0csOpZS4gIA0KDQohW10oaW1hZ2VzL09SNi5qcGcpIA0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBUcmllciBsZXMgdmFsZXVycyBkZSBsYSBjb2xvbm5lIGBKb3VyIGNhbGVuZGFpcmVgIGVuIGZvcm1hdCBgZGF0ZSBhbnTDqWNocm9ub2xvZ2lxdWVgLiAgDQotIFF1ZWxsZSBlc3QgbGEgZGVybmnDqHJlIGRhdGUgZCdpbmNpZGVudCBlbnJlZ2lzdHLDqWUgZGFucyBsZSBmaWNoaWVyID8gIA0KLSBTdXBwcmltZXIgbGUgdHJpLiAgDQo8L2Rpdj4NCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIFRyaWVyIGxlcyB2YWxldXJzIGRlcyBjZWxsdWxlcyBjb21tZSB0ZXh0ZSBkZSBsYSBjb2xvbm5lIGBNb2lzIENhbGVuZHJpZXJgIC4gICANCi0gVHJpZXIgbGVzIHZhbGV1cnMgZGVzIGNlbGx1bGVzIGNvbW1lIHRleHRlIGRlIGxhIGNvbG9ubmUgYEpvdXIgZHUgbW9pc2AuICANCi0gRXhwbG9yZXIgbGUgcsOpc3VsdGF0Li4uICAgDQotIFN1cHByaW1lciBsZSB0cmkgZXQgcmVjb21tZW5jZXIgbGEgcHJvY8OpZHVyZSBhdmVjIHVuIHRyaSBkZSBmb3JtYXQgbm9tYnJlLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNi40LiBGaWx0cmVyIGxlIHRleHRlDQoNCi0gTGEgZm9uY3Rpb24gYEZpbHRyZXIgbGUgdGV4dGVgIHBlcm1ldCBkZSBjaGVyY2hlciB1bmUgb3UgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZXMgZGFucyB1bmUgb3UgcGx1c2lldXJzIHZhcmlhYmxlcy4gIA0KLSBQZXJtZXQgZGUgcmVjaGVyY2hlciBkZXMgY2hhaW5lcyBkZSBjYXJhY3TDqHJlcyBkYW5zIHVuZSBjb2xvbm5lIGV0IGRlIGNvbWJpbmVyIGRlcyBmaWx0cmVzIGFwcGxpcXXDqXMgc3VyIHBsdXNpZXVycyBjb2xvbm5lcyBwb3VyIHJhZmZpbmVyIGxhIHJlY2hlcmNoZS4gIA0KLSBGb25jdGlvbiBwbHVzIGV4cMOpZGl0aXZlIHF1ZSBsZXMgZmFjZXR0ZXMgcXVhbmQgb24gbmUgdmV1dCBxdWUgY2hlcmNoZXIgdW5lIGNoYWluZSBkZSBjYXJhY3TDqHJlcy4gIA0KLSBMJ2FmZmljaGFnZSBkZXMgbGlnbmVzIHNlIGxpbWl0ZXJhIGF1IG5vbWJyZSBkZSBjYXMgY29ycmVzcG9uZGFudHMgYXV4IGNyaXTDqHJlcyBkZSByZWNoZXJjaGUgaW5zY3JpdHMgZGFucyBsZXMgYm9pdGVzIGRlIGZpbHRyZXMuICANCi0gKipUYW50IHF1ZSBsZXMgZmlsdHJlcyBzZXJvbnQgYWN0aWZzLCBsZXMgYWN0aW9ucyBzdWJzw6lxdWVudGVzIHNlIGxpbWl0ZXJvbnQgw6AgY2VzIGNhcyBmaWx0csOpcy4qKiAgDQoNCiFbXShpbWFnZXMvT1I3LmpwZykgDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCioqTGltaXRlciBsYSBsaXN0ZSBhdXggY2FzIHN1cnZlbnVzIMOgIGxhIHN0YXRpb24gQmVycmkgZW50cmUgbWlkaSBldCAxM2guKiogIA0KDQotIEZpbHRyZXIgbGUgdGV4dGUgc3VyIGxhIGNvbG9ubmUgKkNvZGUgZGUgbGlldSo6ICJiZXJyaSIgIA0KLSBGaWx0cmVyIGxlIHRleHRlIHN1ciBsYSBjb2xvbm5lICpIZXVyZSBkZSBsJ2luY2lkZW50KjogIjEyIiAgDQotIEV4cGxvcmVyIGxlcyByw6lzdWx0YXRzICANCi0gQ29tbWVudCBzJ2Fzc3VyZXIgZCdhdm9pciBzZXVsZW1lbnQgbGVzIGNhcyBzdXJ2ZW51cyBlbnRyZSAxMmggZXQgMTNoPyBDb21iaWVuIGRlIGxpZ25lcyBjb3JyZXNwb25kZW50IMOgIGNlcyBjb25kaXRpb25zP15bMTI6IG91IGV4cHJlc3Npb24gcmF0aW9ubmVsbGUgXjEyIC8gNDggY2FzXSAgDQotIFN1cHByaW1lciB0b3VzIGxlcyBmaWx0cmVzLg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMgNy4gTGVzIGZhY2V0dGVzDQoNCiMjIDcuMSBDYXJhY3TDqXJpc3RpcXVlcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IzNC5qcGciICB3aWR0aD0iNjAlIiAvPg0KPC9kaXY+DQoNCi0gTGVzIGZhY2V0dGVzIGNvbnN0aXR1ZW50IGxhIG1hcnF1ZSBkZSBjb21tZXJjZSBkJ09wZW5SZWZpbmUsIGQnb8O5IGxlIGxvZ28hIA0KDQotIEZvbmN0aW9ubmFsaXTDqSBwdWlzc2FudGUgcXVpIHBlcm1ldCBkJ2V4cGxvcmVyIGV0IGRlIGZpbHRyZXIgc2VzIGRvbm7DqWVzIGVuIGZvbmN0aW9uIGRlIGRpZmbDqXJlbnRlcyBjb25kaXRpb25zLiAgDQoNCi0gTidhZmZlY3RlbnQgcGFzIGRpcmVjdGVtZW50IGxlcyBkb25uw6llcywgc2V1bGVtZW50IGxhIHByw6lzZW50YXRpb24uICANCg0KLSDDgCBsYSBiYXNlLCB1bmUgZmFjZXR0ZSBjb3JyZXNwb25kIMOgIGxhIGxpc3RlIGRlcyB2YWxldXJzIHBvc3NpYmxlcyBkJ3VuZSB2YXJpYWJsZSAgKGV0IGRlIGxldXIgb2NjdXJyZW5jZSkgcHLDqXNlbnTDqWUgc2Vsb24gbGUgZm9ybWF0IChjaGFpbmUsIG51bcOpcmlxdWUsIGRhdGUpLiAgDQoNCi0gUGVybWV0dGVudCB1bmUgZXhwbG9yYXRpb24gZXQgbWFuaXB1bGF0aW9uIGRlcyB2YWxldXJzIHBvc3NpYmxlcyBldCBkZSBsZXVycyBjYXMgY29ycmVzcG9uZGFudHMgcGx1cyDDqWxhYm9yw6llcyBxdWUgbGVzIGZpbHRyZXMuICANCg0KLSBPbiBwZXV0IGFpbnNpIGlkZW50aWZpZXIgbGVzIHRlbmRhbmNlcywgbGVzIHLDqWd1bGFyaXTDqXMsIGxlcyBlcnJldXJzLCBsZXMgw6ljYXJ0cywgbGVzIHLDqXDDqXRpdGlvbnMgZXQgIGNpYmxlciBsZXMgdmFsZXVycyBkZSBzb3VzLWdyb3VwZXMgcHLDqWNpcy4gIA0KDQotIENlcyBzb3VzLWdyb3VwZXMgcGV1dmVudCBlbnN1aXRlIMOqdHJlIMOpZGl0w6lzIGV0IGV4cG9ydMOpcyAoYm91dG9uIGBFeHBvcnRlcmAgZW4gaGF1dCDDoCBkcm9pdGUpLiANCg0KPC9icj4NCg0KIyMjIERldXggdHlwZXMgZGUgZmFjZXR0ZXM6DQoNCiAgLSBMZXMgZmFjZXR0ZXMgYXV0b21hdGlzw6llcyAqKlsxXSoqLiAgIA0KICA8L2JyPg0KICAtIExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgKipbMl0qKi4gIA0KICA8L2JyPg0KICAgIC0gSWwgZXN0IGF1c3NpIHBvc3NpYmxlIGRlIGNyw6llciBzZXMgcHJvcHJlcyBmYWNldHRlcyBncsOiY2UgYXUgbGFuZ2FnZSBHUkVMIHBvdXIgZMOpZmluaXIgZGVzIGNvbmRpdGlvbnMgZGUgc8OpbGVjdGlvbi9maWx0cmUgdHLDqHMgcHLDqWNpc2VzICoqWzNdKiogKG9uIHBhcmxlIGVuY29yZSBpY2kgZGUgKmZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyosIG1haXMgZWxsZXMgZG9pdmVudCDDqnRyZSByw6lkaWfDqWVzIG1hbnVlbGxlbWVudCkuDQoNCjwvYnI+DQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjIzLmpwZykNCjwvY2VudGVyPiAgDQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQogIC0gKipbOF0qKiBMZSBsaWVuIGBjaGFuZ2VyYCBwZXJtZXQgZCdvdXZyaXIgdW5lICoqZmVuw6p0cmUgZCfDqWRpdGlvbiBHUkVMKiogcG91ciBtb2RpZmllciBsYSBzeW50YXhlIGRlIGxhIGZhY2V0dGUuICANCiAgLSAqKls5XSoqIFBvdXIgc3VwcHJpbWVyIGxlcyBmYWNldHRlcywgY2xpcXVlciBzdXIgbGUgeCBkZSBjaGFxdWUgZmVuw6p0cmUgb3UgYFRvdXQgc3VwcHJpbWVyYC4gIA0KICAtIFBvdXIgY29uc2VydmVyIGxlcyBmZW7DqnRyZXMgbWFpcyBzdXBwcmltZXIgbGVzIHPDqWxlY3Rpb25zIHF1aSB5IG9udCDDqXTDqSBmYWl0ZXMsIGNsaXF1ZXIgc3VyIGByw6lpbnRpYWxpc2VyYCBzdXIgY2hhcXVlIGZlbsOqdHJlIG91IGBUb3V0IHLDqWluaXRpYWxpc2VyYCAqKls5XSoqLiAgDQogIC0gKipbMTBdKiogT3B0aW9uIGBHcm91cGVgOiBPdXRpbHMgcHJvcG9zYW50IGRpZmbDqXJlbnRzIGFsZ29yaXRobWVzIGRlIHNpbWlsYXJpdMOpIHBlcm1ldHRhbnQgZGUgcmVncm91cGVyIGRlcyBjYXTDqWdvcmllcyBzZW1ibGFibGVzLiAgDQo8L2Rpdj4gDQoNCiMjIyBUcm9pcyBmb3JtYXRzIGRlIGZhY2V0dGVzOg0KDQpPbiByZXRyb3V2ZSDDqWdhbGVtZW50IGRpZmbDqXJlbnRzICoqZm9ybWF0cyBkZSBmYWNldHRlcyoqIC0+IHVuZSBwb3VyIGNoYXF1ZSBmb3JtYXQgZGUgZG9ubsOpZXMgKExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgcHJvcG9zZW50IGF1c3NpIGRlcyBmYWNldHRlcyBib29sw6llbm5lcykuICAgDQoNCg0KIyMjIyAxLiBGYWNldHRlIHRleHR1ZWxsZSAqKls0LTVdKiogDQoNCi0gVHlwZSBkZSBmYWNldHRlIGxlIHBsdXMgc291dmVudCB1dGlsaXPDqS4gICANCi0gUmVncm91cGVudCBkYW5zIGxhIGZlbsOqdHJlIGRlIGdhdWNoZSBsZXMgdmFsZXVycyBkaXN0aW5jdGVzICh0ZXh0dWVsbGVzIG91IG51bcOpcmlxdWVzKSBkZXMgY29sb25uZXMgdm91bHVlcy4gICANCiAgLSBPbiBwZXV0IGZhaXJlIHVuZSBmYWNldHRlIHRleHR1ZWxsZSBzdXIgdW5lIGNvbG9ubmUgbnVtw6lyaXF1ZSBtYWlzIHBhcyBsJ2ludmVyc2UuICANCiAgLSAyMDAwIHZhbGV1cnMgbWF4aW11bSBwYXIgZMOpZmF1dCBtYWlzIHBldXQgw6p0cmUgbW9kaWZpw6kgZGFucyBsZXMgcHLDqWbDqXJlbmNlcy4gU2kgbGVzIHZhbGV1cnMgc29udCB0cm9wIG5vbWJyZXVzZXMsIGVsbGVzIG5lIHNlcm9udCBwYXMgbGlzdMOpZXMgKHVuIGZpbHRyZSBwb3VycmFpdCDDqnRyZSB1dGlsaXPDqSkuIA0KLSBQZXJtZXR0ZW50IGRlIGNvbWJpbmVyIGRpZmbDqXJlbnRzIGZpbHRyZXMgZW4gc8OpbGVjdGlvbm5hbnQgZGlmZsOpcmVudGVzIHZhbGV1cnMgZCd1bmUgb3UgcGx1c2lldXJzIHZhcmlhYmxlcyAoZXQgbGV1cnMgY2FzIGNvcnJlc3BvbmRhbnRzKS4gICANCiAgLSBDbGlxdWVyIGBpbmNsdXJlYCBvdSBgZXhjbHVyZWAgcG91ciBzw6lsZWN0aW9ubmVyIG91IHN1cHByaW1lciBkZXMgY2hvaXggbXVsdGlwbGVzICoqWzEyXSoqLiAgIA0KICAtIFVuZSBmb2lzIGxhIHPDqWxlY3Rpb24gZmFpdGUsIGwnb3B0aW9uIGBpbnZlcnNlcmAgcGVybWV0IGRlIHPDqWxlY3Rpb25uZXIgdG91dCBTQVVGIGxhIHPDqWxlY3Rpb24gKipbMTFdKiouICAgDQogIC0gUGV1dmVudCDDqnRyZSB0cmnDqWVzIHNlbG9uIGxlIG5vbSBvdSBsZSBjb21wdGUgKG5vbWJyZSBkJ29jY3VycmVuY2VzKS4gICANCi0gUGVybWV0dGVudCAqKmTigJnDqWRpdGVyIGxlcyB2YWxldXJzKiogKGNvbnRlbnUgZGUgY2hhcXVlIGNlbGx1bGUgY29ycmVzcG9uZGFudGUpICoqWzEzXSoqLiAgDQoNCg0KIyMjIyAyLiBGYWNldHRlIG51bcOpcmlxdWUgKipbN10qKg0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIHZhcmlhYmxlIG51bcOpcmlxdWUgYWxsYW50IGRlIGxhIHBsdXMgcGV0aXRlIMOgIGxhIHBsdXMgZ3JhbmRlLiAgDQoNCg0KIyMjIyAzLiBGYWNldHRlIGNocm9ub2xvZ2lxdWUgKipbNl0qKg0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIGNvbG9ubmUgZGF0ZSBlbiBsaWduZSBkdSB0ZW1wcy4gIA0KDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCioqRmlsdHJlcioqIA0KDQotIEV4cGxvcmVyIGxlcyB2YWxldXJzIGRlIGxhIHZhcmlhYmxlICpDYXVzZSBwcmltYWlyZSouIFF1ZWxsZSBlc3QgbGEgZGV1eGnDqG1lIHBsdXMgZnLDqXF1ZW50ZT8gDQotIFF1ZWxsZXMgc29udCBsZXMgY2F0w6lnb3JpZXMgZGUgKkNhdXNlIHNlY29uZGFpcmUqIHJlbGnDqWVzIMOgIGxhICpDYXVzZSBwcmltYWlyZSAiQ2xpZW50w6hsZSIqPyAgIA0KLSBRdWVsbGUgZXN0IGxhIHBsdXMgZnLDqXF1ZW50ZT8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuIENvbWJpZW4gZGUgY2FzIGNvcnJlc3BvbmRlbnQgw6AgY2V0dGUgc8OpbGVjdGlvbj8gIA0KLSDDgCBxdWVsICpqb3VyIGRlIGxhIHNlbWFpbmUqIGNldHRlIGNhdXNlIGVzdC1lbGxlIHN1cnZlbnVlIGxlIHBsdXMgc291dmVudD9eW0NsaWVudMOobGUgLyBCbGVzc8OpZSBvdSBtYWxhZGUsIE3DqWZhaXQgdm9sb250YWlyZSwgTnVpc2FuY2UgaW52b2xvbnRhaXJlIC8gTcOpZmFpdCB2b2xvbnRhaXJlIDc4MS8gNV0gICANCi0gUsOpaW5pdGlhbGlzZXIgdG91dGVzIGxlcyBmYWNldHRlcy4NCg0KLSBFeHBsb3JlciBsZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzICpQYXIgbW90KiBldCAqZG91YmxvbnMqIHN1ciBsYSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSouDQoNCioqw4lkaXRlcioqICANCg0KLSBEYW5zIGxhIGZhY2V0dGUgKkNhdXNlIHByaW1haXJlKiwgcmVub21tZXIgbGEgdmFsZXVyICJhdXRyZSIgcG91ciBxdSdlbGxlIHNvaXQgZnVzaW9ubsOpZSDDoCBsYSB2YWxldXIgIkF1dHJlcyIuICANCi0gU3VwcHJpbWVyIHRvdXRlcyBsZXMgZmFjZXR0ZXMuDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipGaWx0cmVyKiogDQoNCi0gUXVlbCBlc3QgbGUgKnN5bXB0b21lKiBsZSBwbHVzIGZyw6lxdWVudD8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuICANCi0gQ2VzIMOpdsOpbmVtZW50cyBvbnQtaWxzIG7DqWNlc3NpdMOpIHVuZSAqw6l2YWN1YXRpb24qP15bQ2xpZW50w6hsZSAvIExpZ25lIG9yYW5nZSAvIE91aSAxN10gICAgIA0KDQoqKsOJZGl0ZXIqKiAgDQoNCi0gw4lkaXRlciBsYSB2YXJpYWJsZSAqw6l2YWN1YXRpb24qIGRlIGZhw6dvbiDDoCBjZSBxdSdpbCBuJ3kgYWl0IHF1ZSAqKmRldXggdmFsZXVycyoqIHBvc3NpYmxlczogT3VpIGV0IE5vbi4gICAgDQoNCjwvZGl2Pg0KDQoqKioNCg0KDQojIyA3LjIuIExlcyByZWdyb3VwZW1lbnRzIChjbHVzdGVyaW5nKQ0KDQotIEZvbmN0aW9uIHF1aSBwZXJtZXQgZCdpZGVudGlmaWVyIGRhbnMgdW5lIGNvbG9ubmUgbGVzIHZhbGV1cnMgZGlzdGluY3RlcyBxdWkgcG91cnJhaWVudCBhdm9pciBsYSBtw6ptZSBzaWduaWZpY2F0aW9uIG91IHF1aSBwb3VycmFpZW50IMOqdHJlIHJlZ3JvdXDDqWVzIGRhbnMgdW5lIG3Dqm1lIGNhdMOpZ29yaWUgPSAidmFyaWF0aW9ucyBzdXIgbGUgbcOqbWUgdGjDqG1lIiDDqXZhbHXDqWVzIGVuIGZvbmN0aW9uIGRlIFtkaWZmw6lyZW50cyBhbGdvcml0aG1lc10oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL0NsdXN0ZXJpbmctSW4tRGVwdGgpLiANCg0KLSBDaGFxdWUgc3VnZ2VzdGlvbiBkb2l0IMOqdHJlIGFwcHJvdXbDqWUgaW5kaXZpZHVlbGxlbWVudCBwb3VyIHF1ZSBsZXMgbW9kaWZpY2F0aW9ucyBzJ2FwcGxpcXVlbnQgKGxlcyByZWdyb3VwZW1lbnRzIHByb3Bvc8OpcyBuZSBzb250IHBhcyBuw6ljZXNzYWlyZW1lbnQgcGVydGluZW50cykuDQoNCi0gT3BlblJlZmluZSBwcm9wb3NlIGRlcyAqY2x1c3RlcnMqIHNlbG9uIGRpZmbDqXJlbnRlcyBtw6l0aG9kZXMgcGx1cyBvdSBtb2lucyDDqWxhYm9yw6llcyAoKlByb2NoZSB2b2lzaW4qIHByZW5kIHBsdXMgZGUgbcOpbW9pcmUpIHF1aSBwZXJtZXR0ZW50IGRlIHJlZ3JvdXBlciBsZXMgdmFsZXVycyBzaW1pbGFpcmVzIGV0IHByb3Bvc2VudCBkZXMgbWF0Y2hzIHBvc3NpYmxlcyAoKmZ1enp5IG1hdGNoaW5nKik6IHBhciBleGVtcGxlICplbXByZWludGUqIGVzdCBwbHVzIGNvbnNlcnZhdGV1ciAoZGlzdGluZ3VlIGNhc3NlLCBlc3BhY2VzLCBvcmRyZSwgcsOpcMOpdGl0aW9uLCBwb25jdHVhdGlvbi4uLiksICpuZ3JhbSogZXN0IHBsdXMgZmxleGlibGUgKG3Dqm1lcyBjYXJhY3TDqHJlcyksICpNZXRhcGhvbmUzKiBlc3QgbGUgcGx1cyAibGliw6lyYWwiIChtw6ptZSBwcm9ub25jaWF0aW9uKS4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQ3LDqWVyIHVuZSBmYWNldHRlIHRleHR1ZWxsZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1Ki4gIA0KLSBDbGlxdWVyIHN1ciBgR3JvdXBlYCBldCBleHBsb3JlciBsZXMgcmVncm91cGVtZW50cyBlbiBmb25jdGlvbiBkZXMgZGlmZsOpcmVudHMgYWxnb3JpdGhtZXMuICANCjwvZGl2Pg0KDQoqKioNCg0KDQojIyA3LjMuIExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgDQoNCg0KLSBGb25jdGlvbm5lbnQgY29tbWUgZGVzIGZhY2V0dGVzIGF1dG9tYXRpc8OpZXMgc2F1ZiBxdSdvbiBuZSBwZXV0IMOpZGl0ZXIgZW4gZm9uY3Rpb24gZGUgY2VzIHLDqXN1bHRhdHMgY2FyIGVsbGVzIHByw6lzZW50ZW50IGRlcyBkb25uw6llcyBtb2RpZmnDqWVzIGVuIG3DqW1vaXJlLg0KDQotIE9udCDDqXTDqSBkw6l2ZWxvcHDDqWVzIGV0IGF1dG9tYXRpc8OpZXMgYWZpbiBkJ2V4cGxvcmVyIGRlcyBhc3BlY3RzIHByw6ljaXMgZGVzIGRvbm7DqWVzIHNhbnMgYXZvaXIgw6AgbGVzICByw6lkaWdlciBlbiBzeW50YXhlIEdSRUw6IA0KDQogIC0gYEZhY2V0dGUgcGFyIG1vdGAgOiBEaXZpc2UgY2hhcXVlIG1vdCAoc8OpcGFyw6kgZCd1biBlc3BhY2UpIGQndW5lIGNvbG9ubmUgZXQgbGVzIHByw6lzZW50ZSBlbiBsaXN0ZSBkZSB2YWxldXJzIGRpc3RpbmN0ZXMgW3ZhbHVlLnNwbGl0KCIgIildLg0KICANCiAgLSBgRmFjZXR0ZSBkb3VibG9uc2A6IHZhbGV1cnMgYm9vbMOpZW5uZXMgaW5kaXF1YW50IHNpIGxlcyB2YWxldXJzIHNvbnQgdW5pcXVlcyAoZmFsc2UpIG91IG5vbiAodHJ1ZSkgW2ZhY2V0Q291bnQodmFsdWUsICd2YWx1ZScsICdTeW1wdG9tZScpID4gMV0uICANCiAgDQogIC0gYEZhY2V0dGVzIGxvZ2FyaXRobWlxdWVzYDogbW9kaWZpY2F0aW9uIGxvZ2FyaXRobWlxdWUgZGUgdmFsZXVycyBudW3DqXJpcXVlcyBbdmFsdWUubG9nKCldLg0KICANCiAgLSBgRmFjZXR0ZSBsb25ndWV1ciBkZSB0ZXh0ZWA6IGxpc3RlIGxlIG5vbWJyZSBkZSBjYXJhY3TDqHJlcyBkdSBjb250ZW51IGRlcyBjZWxsdWxlcyBkJ3VuZSBjb2xvbm5lIFt2YWx1ZS5sZW5ndGgoKV0uDQogIA0KICAtIEZhY2V0dGVzIHBlcm1ldHRhbnQgZCdleHBsb3JlciBsZXMgdmFsZXVycyBkJ2BlcnJldXJgLCBgbnVsbGVzYCwgYHZpZGVzYC4uLiBbaXNFbXB0eVN0cmluZyh2YWx1ZSldDQoNCioqKiANCg0KIyA4LiAgVHJhbnNmb3JtYXRpb25zDQoNCi0gT3BlblJlZmluZSBwZXJtZXQgZCdleHBsb3JlciBtYWlzIGF1c3NpIGRlIG1vZGlmaWVyIHNlcyBkb25uw6llcyBzYW5zIGF2b2lyIMOgIHRvdWNoZXIgYXUgY29udGVudSBkZSBjZWxsdWxlcyBtYW51ZWxsZW1lbnQuICANCg0KLSBDb21tZSBwb3VyIGxlcyBmYWNldHRlcywgbGVzIGZvbmN0aW9ucyBkZSB0cmFuc2Zvcm1hdGlvbiBwZXV2ZW50IHNlIGZhaXJlIGRlIGRldXggZmHDp29uczogICAgDQoNCiAgMS4gVHJhbnNmb3JtYXRpb25zIGF1dG9tYXRpc8OpZXMgKGBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCkgKipbMl0qKjogZm9uY3Rpb25zIHBlcm1ldHRhbnQgZCdhcHBsaXF1ZXIgZGVzIG1vZGlmaWNhdGlvbnMgY291cmFudGVzIHN1ciBsZSBmb3JtYXQgZXQgbGEgc3RydWN0dXJlIGRlcyBjZWxsdWxlcy9jb2xvbm5lcy4gIA0KICANCiAgMi4gVHJhbnNmb3JtYXRpb25zIG1hbnVlbGxlcyBkYW5zIGxhIGZlbsOqdHJlIEdSRUwgKipbMV0qKiBhZmluIGQnYWxsZXIgYmVhdWNvdXAgcGx1cyBsb2luLiAgDQogIA0KDQohW10oaW1hZ2VzL09SMjQuanBnKQ0KDQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQpQb3VyIHZvaXIgbGEgc3ludGF4ZSBjb3JyZXNwb25kYW50IMOgIGNoYXF1ZSBmb25jdGlvbiBkZSBgdHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlc2AsIGFwcGxpcXVlciBsYSBmb25jdGlvbiBzdXIgdW5lIGNvbG9ubmUgcHVpcyBhbGxlciB2b2lyIGwnaGlzdG9yaXF1ZS4gUGFyIGV4ZW1wbGU6IGB2YWx1ZS50b051bWJlcigpYCwgYHZhbHVlLnRvVGl0bGVjYXNlKClgLCBgdmFsdWUudG9OdW1iZXIoKWAsIGB2YWx1ZS50b1VwcGVyY2FzZSgpYCwgYHZhbHVlLnRyaW0oKWAuLi4gPC9kaXY+DQoNCioqKiANCg0KDQojIyA4LjEuIERpdmlzZXIgbGUgY29udGVudSBkZSBjZWxsdWxlcyBtdWx0aXZhcmnDqWVzDQoNCi0gKipEZXV4IG9wdGlvbnM6ICoqICANCiAgMS4gRW4gZGl2aXNhbnQgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZW4gKipwbHVzaWV1cnMgY29sb25uZXMqKjogYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lc2AgIA0KICAyLiBFbiBkaXZpc2FudCBsZSBjb250ZW51IHN1ciAqKnBsdXNpZXVycyBsaWduZXMqKjogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IERpdmlzZXIgbGVzIGNlbGx1bGVzIG11bHRpdmFyacOpZXNgICANCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjM3LmpwZykgIA0KDQotIExhIHByZW1pw6hyZSBvcHRpb24gZXN0IGxhIHBsdXMgZnLDqXF1ZW50ZS4gDQotIExhIGRldXhpw6htZSBvcHRpb24gYXVyYSB1biBlZmZldCBpbXBvcnRhbnQgc3VyIGxhIHN0cnVjdHVyZSBkZXMgb2JzZXJ2YXRpb25zIHB1aXNxdSdlbGxlIG11bHRpcGxpZXJhIGxlIG5vbWJyZSBkZSBsaWduZXMgcGFyIGNhcyAoY2UgcXVpIG7DqWNlc3NpdGVyYSBkZSBwYXNzZXIgw6AgbGEgdnVlIHBhciBgZW50csOpZXNgKS4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NClRyYW5zZm9ybWVyIGxhIHZhcmlhYmxlICpMaWduZSoNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqVW5pZm9ybWlzZXIgbGUgbm9tIGRlcyBsaWduZXM6KiogIA0KDQotIENyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSBMaWduZS4gDQoNCi0gRGV1eCBwcm9ibMOobWVzIHNlIHBvc2VudDogMSkgbGVzIG5vbXMgZGUgbGlnbmVzIG5vbiB1bmlmb3JtZXMgZXQgMikgbGVzIHZhbGV1cnMgbXVsdGlwbGVzLiAgDQoNCi0gTm91cyBjaG9pc2lzc29ucyBkJ3VuaWZvcm1pc2VyIGxlcyB2YWxldXJzIGVuIHV0aWxpc2FudCBsZXMgbnVtw6lyb3MgZGUgbGlnbmVzIGV0IGVuIHN1cHByaW1hbnQgbGUgbW90IExpZ25lLiAgDQoNCi0gRXhwbG9yZXIgZXQgYWNjZXB0ZXIgbGVzIHJlZ3JvdXBlbWVudHMgcHJvcG9zw6lzIGF2ZWMgbGEgZm9uY3Rpb24gYEdyb3VwZWAuICANCg0KLSBTdXBwcmltZXIgbGUgbW90IGxpZ25lOiAgDQoNCiAgLSBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gcmVtcGxhY2VyYCAtPiAiTGlnbmUiIHBhcjogbmUgcmllbiBzYWlzaXIgZGFucyBsJ2VuY2FkcsOpLiAgICANCg0KDQotIENsaXF1ZXIgZW5zdWl0ZSBkaXJlY3RlbWVudCBzdXIgYGVkaXRgIHN1ciB1bmUgY2VsbHVsZSBkZSBsYSBjb2xvbm5lIGRlICpMaWduZSogLT4gcmVtYXJxdWVyIGxhIHByw6lzZW5jZSBkJ3VuIGVzcGFjZSwgc3VwcHJpbWVyIGwnZXNwYWNlIGV0IGZlcm1lci4gDQoNCi0gUmFmcmFpY2hpciBsYSBmYWNldHRlIGV0IG9ic2VydmVyIGwnaW1wYWN0LiANCg0KLSBSZW1hcnF1ZXIgbCdpbXBhY3QgZGUgbCdlc3BhY2UgZGFucyBsYSBmYWNldHRlLiBDZXMgZXNwYWNlcyBwZXV2ZW50IMOqdHJlIHN1cHByaW3DqXMgZ3LDomNlIMOgIGxhIGZvbmN0aW9uOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyAtPiBTdXBwcmltZXIgbGVzIGVzcGFjZXMgZGUgZMOpYnV0IGV0IGRlIGZpbmAuIA0KLSBSZW1wbGFjZXIgbGVzIGNvdWxldXJzIGRlIGxpZ25lIHBhciBsZXVyIG51bcOpcm8gZGlyZWN0ZW1lbnQgZGFucyBsYSBmYWNldHRlLiAgIA0KPC9kaXY+DQoNCg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipEaXZpc2VyIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVuIGNyw6lhbnQgZGVzIGNvbG9ubmVzIGF2ZWMgdW5lIHNldWxlIHZhbGV1ciAgKioNCg0KLSBEYW5zIGxhIGZhY2V0dGUsIHJlbXBsYWNlciBsZXMgIi0iIHBhciBkZXMgIiwiLiAgICANCg0KLSBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IERpdmlzZXIgZW4gcGx1c2lldXJzIGNvbG9ubmVzYDoNCiAgLSBEw6lmaW5pciBsZSBzw6lwYXJhdGV1ciAiLCIgKGNlbHVpLWNpIGRpc3BhcmFpdHJhKS4gIA0KICAtIETDqWNvY2hlciBsZXMgb3B0aW9ucyAiRGV2aW5lciIgZXQgIlN1cHByaW1lciIuICANCi0gTGVzIG5vdXZlbGxlcyBjb2xvbm5lcyByZXByZW5kcm9udCBsZSBub20gZGUgbCdvcmlnaW5hbCBudW3DqXJvdMOpLiBMZXMgcmVub21tZXI6IHByZW1pZXJlLCBkZXV4aWVtZSwgdHJvaXNpZW1lLCBxdWF0cmllbWUuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KRGl2aXNlciBwYXIgbGVzIGxvbmd1ZXVycyBkZSBjaGFtcHMgbGEgY29sb25uZSBgTnVtw6lybyBkJ2luY2lkZW50YCBwb3VyIGVuIGNyw6llciBkZXV4IG5vdXZlbGxlczogIA0KICAxLiBVbmUgY29sb25uZSBjb250ZW5hbnQgbGUgcHJlbWllciBjYXJhY3TDqHJlIGluZGlxdWFudCBsZSB0eXBlIGQnaW5jaWRlbnQsIHNvaXQgVCAodHJhaW4pIG91IFMgKHNlcnZpY2UpLiAgDQogIDIuIFVuZSBjb2xvbm5lIGNvbnRlbmFudCBsJ2Vuc2VtYmxlIGRlcyBjYXJhY3TDqHJlcyBudW3DqXJpcXVlcyBpbmRpcXVhbnQgbGUgbnVtw6lybyBkJ2luY2lkZW50LiAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlbDqXJpZmljYXRpb25zIHByw6lhbGFibGVzOioqDQogIDEuIFbDqXJpZmllciBxdSdpbCBuJ3kgYSBwYXMgZGUgZG91YmxvbiBkYW5zIGNldHRlIGNvbG9ubmU6IGBGYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgLT4gRmFjZXR0ZSBkb3VibG9uYCAtPiBRdWVsIGVzdCBsZSBwcm9ibMOobWU/ICBDbGlxdWVyIHN1ciBgQ2hhbmdlcmAgZXQgYW5hbHlzZXIgbCdleHByZXNzaW9uLiAgDQogIDIuIFbDqXJpZmllciBsYSBsb25ndWV1ciBkZSBjaGFxdWUgY2FzOiAgYEZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyAtPiBGYWNldHRlIGxvbmd1ZXVyIGR1IHRleHRlYC4gICAgDQoNCioqRGl2aXNlciBsYSBjb2xvbm5lOioqICANCi0gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lcyBzZWxvbiBsZXMgbG9uZ3VldXJzIGRlIGNoYW1wc2AgOiAxLCA4LiAgICANCi0gRMOpY29jaGVyIDogZGV2aW5lciBsZSB0eXBlIGRlIGNlbGx1bGUgZXQgU3VwcHJpbWVyIGNldHRlIGNvbG9ubmUuICAgIA0KLSBSZW5vbW1lciBsZXMgY29sb25uZXMgOiBUeXBlIGV0IElELiAgICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KIyMgOC4yLiBGdXNpb25uZXIgbGUgY29udGVudSBkZSBwbHVzaWV1cnMgY29sb25uZXMNCg0KIyMgRXhlcmNpY2UgICANCg0KTm91cyBzb3VoYWl0b25zIGNhbGN1bGVyIGxhIGR1csOpZSBkZXMgaW5jaWRlbnRzIChuw6ljZXNzaXRlIGwndXRpbGlzYXRpb24gZGUgR1JFTCkuIFBvdXIgY2UgZmFpcmUgbm91cyBjcsOpZXJvbnMgZGV1eCBjb2xvbm5lcyBwb3VyIGVuc3VpdGUgY2FsY3VsZXIgbGEgZGlmZsOpcmVuY2UgZW50cmUgbGVzIGRldXg6ICAgIA0KLSBUcmFuc2Zvcm1hdGlvbiBzaW1wbGUgYXV0b21hdGlzw6llOiBDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgZnVzaW9ubmFudCBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgbCdpbmNpZGVudCouICANCi0gVHJhbnNmb3JtYXRpb24gYXZhbmPDqWUgR1JFTCAocGV1dCDDqnRyZSByw6lhbGlzw6llIGRlIGZhw6dvbiBhdXRvbWF0aXPDqWUpOiBDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgZnVzaW9ubmFudCBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgbCdpbmNpZGVudCouICANCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCkxvcnNxdWUgbCdvbiBmdXNpb25uZSBkZXMgY29sb25uZXMsIGlsIGZhdXQgcG9ydGVyIHVuZSBhdHRlbnRpb24gcGFydGljdWxpw6hyZSBhdSBzw6lwYXJhdGV1ciBjaG9pc2kuIE5lIHBhcyB1dGlsaXNlciB1biBjYXJhY3TDqHJlIHF1aSBwb3VycmFpdCBmYWlyZSBwYXJ0aWUgZHUgY29udGVudSAoZXg6ICwpIG91IHF1aSBzZXJ2aXJhIMOgIGRpdmlzZXIgbGVzIGNvbG9ubmVzICguY3N2KQ0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCjEuICoqRm9uY3Rpb24gYXV0b21hdGlzw6llKiogLT4gRnVzaW9ubmVyIGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSBsJ2luY2lkZW50Kg0KPC9kaXY+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIEFubsOpZSBjaXZpbGUgLT4gYMOJZGl0ZXIgbGEgY29sb25uZWAgLT4gYEpvaW5kcmUgbGVzIGNvbG9ubmVzYC4gICAgDQotIEpvaW5kcmUgZGVzIGNvbG9ubmVzIC0+IENvY2hlciBsZXMgY29sb25uZXMgdm91bHVlcyBldCBsZXMgdHJpZXIgc2Vsb24gbCdvcmRyZSB2b3VsdSBkYW5zIGxhIG5vdXZlbGxlIHZhbGV1ci4gIA0KLSBTw6lwYXJhdGV1ciBlbnRyZSBsZSBjb250ZW51IGRlIGNoYXF1ZSBjb2xvbm5lOiAiLSIuICAgIA0KLSDDiWNyaXJlIGxlIHLDqXN1bHRhdCBkYW5zIHVuZSBub3V2ZWxsZSBjb2xvbm5lIG5vbW3DqWU6ICpEYXRlKi4gICAgDQoNCi0gVHJhbnNmb3JtZXIgZW4gZm9ybWF0IGRhdGU6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IEVuIGRhdGVgLiAgICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KMi4gKipGZW7DqnRyZSBHUkVMKiogLT4gRnVzaW9ubmVyIGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSByZXByaXNlKg0KPC9kaXY+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIEFubsOpZSBjaXZpbGUgLT4gw4lkaXRlciBsYSBjb2xvbm5lIC0+IEFqb3V0ZXIgdW5lIGNvbG9ubmUgZW4gZm9uY3Rpb24gZGUgY2V0dGUgY29sb25uZTogIA0KDQpgY2VsbHNbIkFubsOpZSBjaXZpbGUiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJNb2lzIGNhbGVuZHJpZXIiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJKb3VyIGR1IG1vaXMiXS52YWx1ZSArICIgIiArICBjZWxsc1siSGV1cmUgZGUgbCdpbmNpZGVudCJdLnZhbHVlYC4gIA0KDQotIFbDqXJpZmllciBsYSB0cmFuc2Zvcm1hdGlvbiBhdmVjIHVuZSBmYWNldHRlIGB2YWx1ZS50eXBlKClgLiAgDQoNCi0gUmVjb21tZW5jZXIgbGEgam9pbnR1cmUgcG91ciBjcsOpZXIgdW5lIGNvbG9ubmUgYXZlYyBsYSBkYXRlLWhldXJlIGRlIGZpbiBkZSBsJ2luY2lkZW50DQpgY2VsbHNbIkFubsOpZSBjaXZpbGUiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJNb2lzIGNhbGVuZHJpZXIiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJKb3VyIGR1IG1vaXMiXS52YWx1ZSArICIgIiArICBjZWxsc1siSGV1cmUgZGUgbCdpbmNpZGVudCJdLnZhbHVlYC4gIA0KDQotIFRyYW5zZm9ybWVyIGVuIGZvcm1hdCBkYXRlOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyAtPiBFbiBkYXRlYC4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpDYWxjdWxlciBsYSBkdXLDqWUgZGUgbCdpbmNpZGVudCAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIHZpZGU6ICANCmDDiWRpdGVyIGxhIGNvbG9ubmUgPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmUgYCAtPiBDaG9pc2lyIHVuIG5vdXZlYXUgbm9tIGV0IGxlIGNvbnRlbnU6ICIiLiAgDQoNCi0gUG91ciBjYWxjdWxlciB1bmUgZGlmZsOpcmVuY2UgZW50cmUgZGF0ZTogYGRpZmYoZGF0ZTEsIGRhdGUyLCAicmVzdWx0cyBmb3JtYXQiKWAuICAgIA0KDQpgZGlmZihjZWxsc1snZGF0ZTInXS52YWx1ZSxjZWxsc1snZGF0ZTEnXS52YWx1ZSwgJ21pbnV0ZXMnKWAuICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMgOS4gTGUgbGFuZ2FnZSBHUkVMIA0KDQoNCi0gKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSogDQotIExhbmdhZ2Ugc2ltaWxhaXJlIMOgIGphdmFzY3JpcHQgZXQgZm9ybXVsZXMgZXhjZWwuICAgIA0KLSBQZXJtZXQgbGEgcsOpZGFjdGlvbiBkJ2V4cHJlc3Npb25zIHZpc2FudCDDoCBtYW5pcHVsZXIvdHJhbnNmb3JtZXIgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZCd1bmUgY29sb25uZS4gIA0KKFZvaXIgbGEgW2RvY3VtZW50YXRpb24gb2ZmaWNpZWxsZV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsKSBwb3VyIHBsdXMgZGUgZMOpdGFpbHMpICANCi0gTGFuZ2FnZSBjb21wb3PDqSBkZSBbZm9uY3Rpb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2dyZWxmdW5jdGlvbnMpIGV0IGQnW29iamV0c10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucyN2YXJpYWJsZXMpLg0KDQo8L2JyPg0KDQojIyAgOS4xLiBHUkVMIC0gUHJpbmNpcGVzIGRlIGJhc2UgDQoNCiMjIyMgVXRpbGlzZSB1bmUgc3ludGF4ZSBwYXJ0aWN1bGnDqHJlIHBvdXIgY2libGVyIGxlcyBvYmpldHMgKHZhcmlhYmxlcyk6ICANCi0gQ29udGVudSBkZSBjb2xvbm5lIGFjdHVlbGxlOiBgdmFsdWVgLiAgICAgDQotIENvbnRlbnUgZCd1bmUgYXV0cmUgY29sb25uZTogYGNlbGxzWydub20tY29sb25uZSddLnZhbHVlYC4gICAgDQotIENvbnRlbnUgdGV4dHVlbDogImd1aWxsZW1ldCBzaW1wbGUgb3UgZG91YmxlIi4gICAgDQoNCjwvYnI+DQoNCiMjIyMgRGV1eCBmb3JtYXRzIGRlIG5vdGF0aW9uOiAgDQotIEltYnJpcXXDqWU6ICh0cmltKHRvTG93ZXJjYXNlKHZhbHVlKSkuICAgIA0KLSAqKlPDqXF1ZW50aWVsbGUqKjogdmFsdWUudG9Mb3dlcmNhc2UoKS50cmltKCkgKHBsdXMgZmFjaWxlIMOgIGxpcmUpLiAgICANCg0KPC9icj4NCg0KIyMjIyBEaWZmw6lyZW50cyB0eXBlcyBkZSBmb25jdGlvbnM6ICANCi0gTGVzIGZvbmN0aW9ucyBldCBsZXVyIGNvbXBvcnRlbWVudCBkw6lwZW5kcm9udCBkdSB0eXBlIGRlIGRvbm7DqWVzIG1hbmlwdWzDqWVzLiAgDQotIFtDZXJ0YWluZXMgZm9uY3Rpb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2dyZWxmdW5jdGlvbnMjc2xpY2VhLW4tZnJvbS1uLXRvLW9wdGlvbmFsKSBwZXJtZXR0ZW50IGRlIHRyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgZW4gYGFycmF5c2AgKGxpc3RlIGQnw6lsw6ltZW50cykgZXQgZGUgbGVzIG1hbmlwdWxlci4gIA0KLSBbQ2VydGFpbmVzIGZvbmN0aW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucyNyZWd1bGFyLWV4cHJlc3Npb25zKSBwZXJtZXR0ZW50IGQndXRpbGlzZXIgbGVzIFtleHByZXNzaW9ucyByw6lndWxpw6hyZXNdKCNleHByZXNzaW9uKS4gIA0KDQo8L2JyPg0KDQojIyMjIERpZmbDqXJlbnRzIHR5cGVzIGQnb3DDqXJhdGV1cnM6ICANClNlbG9uIGxlIGZvcm1hdCwgZGlmZsOpcmVudHMgdHlwZXMgZCcqKm9ww6lyYXRldXJzKiogcGV1dmVudCDDqnRyZSB1dGlsaXPDqXMgZW50cmUgbGVzIHZhbGV1cnM6ICANCgktIE9ww6lyYXRldXJzIGFyaXRobcOpdGlxdWVzOiArLCAtLCAqLCAvICANCgktIE9ww6lyYXRldXJzIGRlIGNvbXBhcmFpc29uOiA9PSwgPiwgPCAgDQogIA0KKipQYXIgZXhlbXBsZToqKg0KDQotIExlICIrIiBlbnRyZSBkZXV4IGNvbnRlbnVzIG51bcOpcmlxdWVzID0gc29tbWUNCg0KIVtdKGltYWdlcy9PUjMwLmpwZykNCg0KLSBMZSAiKyIgYXZlYyB1biBjb250ZW51IHRleHR1ZWwgPSBjb25jYXTDqW5hdGlvbg0KDQohW10oaW1hZ2VzL09SMzEuanBnKQ0KDQo8L2JyPg0KDQoqKiogIA0KDQojIyAgOS4yLiBHUkVMIC0gTCdpbmRleGF0aW9uLCBsYSBzw6lsZWN0aW9uIGV0IGxhIG1hbmlwdWxhdGlvbiBkJ8OpbMOpbWVudHM6ICANCg0KLSBDaGFxdWUgY2FyYWN0w6hyZSBjb21wb3NhbnQgbGEgdmFsZXVyIGQndW5lIGNlbGx1bGUgZXN0IG9yZG9ubsOpIGRhbnMgdW4gaW5kZXggKirDoCBwYXJ0aXIgZGUgMCoqICgxZXIgw6lsw6ltZW50KS4NCi0gQ2hhcXVlIMOpbMOpbWVudCBkJ3VuICphcnJheSogZXN0IG9yZG9ubsOpIGRhbnMgdW4gaW5kZXggKirDoCBwYXJ0aXIgZGUgMCoqICgxZXIgw6lsw6ltZW50KSBldCBwZXV0IMOqdHJlIGNpYmzDqSBncsOiY2UgYXV4IGBbIF1gLiAgDQotIEwnb3DDqXJhdGV1ciBgWyBdYCBwZXJtZXQgZGUgY2libGVyL3PDqWxlY3Rpb25uZXIgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZXMgb3UgZGVzIHNvdXMtw6lsw6ltZW50cyBzcMOpY2lmaXF1ZXMuIA0KDQo8L2JyPg0KDQojIyMgRXhlbXBsZSAtIEZvbmN0aW9uIHNwbGl0KCkgICANCg0KPiBgdmFsdWVbMCw4XWAgLT4gTW9udHLDqWFsIChRdcOpYmVjKSA9ID8gICANCj4gYHZhbHVlLnNwbGl0KCIoIilbMV1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/ICAgDQo+IGB2YWx1ZS5zcGxpdCgiKCIpWzFdLnNwbGl0KCIpIilbMF1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/ICANCj4gYHZhbHVlWzBdICsgdmFsdWVbM10gKyB2YWx1ZVs3XWAgLT4gTW9udHLDqWFsIChRdcOpYmVjKSA9ID9eW01vbnRyw6lhbCAvIFF1w6liZWMpIC8gUXXDqWJlYyAvIE10bF0gIA0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZSAtIEZvbmN0aW9uIHJlcGxhY2UoKSAgDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCmBJU0JOOiA5NzgtMi0xMy0wODI5MzAtMGANCg0KQ29uc2VydmVyIHNldWxlbWVudCBsZSBjaGlmZnJlIGRlIGwnSVNCTiBzYW5zIGxlcyB0cmFpdHMgZCd1bmlvbj9eW3ZhbHVlWzUsMjRdLnJlcGxhY2UoIi0iLCAiIildDQoNCkluZGljZXMgOiAgDQoNCi0gRGV1eCBmYcOnb25zIGRlIGZhaXJlOiBgdmFsdWVbXWAgT1UgYHZhbHVlLnNwbGl0KClgDQotIGByZXBsYWNlKClgIChpbCBmYXV0IHJlbXBsYWNlciAicXVlbHF1ZSBjaG9zZSIsICJwYXIgbGUgdmlkZSIpDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQojIyMgRXhlbXBsZSAtIEZvbmN0aW9uIHNsaWNlKCkgIA0KDQpgTWFydGlub2xsaSwgUGFzY2FsOyBHYWJyaWVsbGksIE5pbm87IEZvcnRpZXIsIENhdGhlcmluZTsgQmVsbGVtYXJlLCBQYXNjYWxlYA0KDQohW10oaW1hZ2VzL09SMjUuanBnKQ0KDQrDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1lciAtPiBgdmFsdWUuc3BsaXQoIjsgIikuc2xpY2UoMSkuam9pbigiXG4iKWAgDQoNCiFbXShpbWFnZXMvT1IzOS5qcGcpDQoNCi0gYHNwbGl0KClgOiBkaXZpc2VyIGxhIGNlbGx1bGUgZW4gw6lsw6ltZW50cyBkaXN0aW5jdHMgc3VyIGxhIGJhc2UgZHUgc8OpcGFyYXRldXIgOw0KLSBgc2xpY2UoKWAgOiBjb25zZXJ2ZXIgbGVzIMOpbMOpbWVudHMgw6AgcGFydGlyIGRlIGwnw6lsw6ltZW50IDEgZG9uYyBzdXBwcmltZSBsZSAwLiANCi0gYGpvaW4oKWA6IGpvaW5kcmUgYXZlYyBsZSBzw6lwYXJhdGV1ciA7DQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlIC0gRm9uY3Rpb24gc29ydCgpICANCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KTWV0dHJlIGxlcyBub21zIGVuIG9yZHJlIGFscGhhYsOpdGlxdWUgZXQgbGVzIGpvaW5kcmUgYXZlYyB1bmUgdmlyZ3VsZS5eW3ZhbHVlLnNwbGl0KCI7ICIpLnNvcnQoKS5qb2luKCIsICIpXQ0KDQpJbmRpY2VzOiAgDQoNCi0gYHNwbGl0KClgOiBkaXZpc2VyIGxhIGNlbGx1bGUgZW4gw6lsw6ltZW50cyBkaXN0aW5jdHMgc3VyIGxhIGJhc2UgZHUgc8OpcGFyYXRldXIgIA0KDQotIGBzb3J0KClgOiB0cmllciBsZXMgw6lsw6ltZW50cyAocmVzdGUgdmlkZSkNCg0KLSBgam9pbigpYDogam9pbmRyZSBhdmVjIGxlIHPDqXBhcmF0ZXVyICANCg0KDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQojIyMgRXhlbXBsZSAtIEZvbmN0aW9uIHJldmVyc2UoKSAgDQoNCsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWVyIC0+IGB2YWx1ZS5zcGxpdCgiOyAiKVsxXS5zcGxpdCgiLCAiKS5yZXZlcnNlKCkuam9pbigiICIpICsgIiBlc3QgbGUgbWVpbGxldXIiYCANCg0KIVtdKGltYWdlcy9PUjM4LmpwZykNCg0KLSBgc3BsaXQoKWA6IGRpdmlzZSBsYSBjZWxsdWxlIGVuIMOpbMOpbWVudHMgZGlzdGluY3RzIHN1ciBsYSBiYXNlIGR1IHPDqXBhcmF0ZXVyIDsgZXQgcmV0aWVudCBsZSBkZXV4acOobWUgw6lsw6ltZW50DQotIGBzcGxpdCgpYDogZGl2aXNlIGNldCDDqWzDqW1lbnQgc3VyIGxlIHPDqXBhcmF0ZXVyICwNCi0gYHJldmVyc2UoKWA6IGludmVyc2UgbCdvcmRyZSBkZXMgZGV1eCDDqWzDqW1lbnRzDQotIGBqb2luKClgOiByYXR0YWNoZSBsZXMgZGV1eCDDqWzDqW1lbnRzIGRpdmlzw6kgYXZlYyB1biBlc3BhY2UNCg0KPC9icj4NCg0KKioqDQoNCiMjIDkuMy4gQ3LDqWVyIGRlcyBmYWNldHRlcyBhdmVjIEdSRUwNCg0KIyMgRXhlcmNpY2VzDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBwb3VyIGxpc3RlciBsZXMgY2FzIHNlbG9uIGwnKmhldXJlIGRlIGwnaW5jaWRlbnQqIHNldWxlbWVudCwgc2FucyBsZXMgbWludXRlcyAoMiBwcmVtaWVycyBjYXJhY3TDqHJlcykuIENvbW1lbnQgZmFpcmUgYWZmaWNoZXIgbGVzIG1pbnV0ZXMgc2V1bGVtZW50P15bdmFsdWVbMyw1XSBvdSB2YWx1ZS5zdWJzdHJpbmcoMyldIA0KDQpgdmFsdWVbMCwyXWAgICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1KiBwb3VyIGlkZW50aWZpZXIgbGVzIGNhcyBkb250IGxhIHZhbGV1ciBjb21tZW5jZSBwYXIgIkPDtHRlIiAgDQoNCmB2YWx1ZS5zdGFydHNXaXRoKOKAnEPDtHRl4oCdKWAgICAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgcG91ciBpZGVudGlmaWVyIGxlcyBjYXMgZG9udCBsYSB2YWxldXIgZGFucyBsYSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSogZXN0IGxhIG3Dqm1lIHF1ZSBkYW5zIGxhIGNvbG9ubmUgKkNhdXNlIHNlY29uZGFpcmUqDQoNCmB2YWx1ZSA9PSBjZWxsc1siQ2F1c2Ugc2Vjb25kYWlyZSJdLnZhbHVlYCAgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgOS40LiBSZWNoZXJjaGVyL3JlbXBsYWNlciB1biBjYXJhY3TDqHJlIGRhbnMgdG91dGVzIGxlcyBjb2xvbm5lcyBhdmVjIEdSRUwNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NClJlbXBsYWNlciBsZXMgdmFsZXVycyAiIyIgZGFucyB0b3V0ZSBsYSBiYXNlIGRlIGRvbm7DqWVzIHBhciAiYXVjdW4iKiogICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gUXVlbCBwcm9ibMOobWUgY2UgcmVtcGxhY2VtZW50IHBldXQtaWwgcHJvdm9xdWVyPyAgICANCi0gRXhwbG9yZXIgbCdpbXBhY3QgZGVzIHRyb2lzIGV4cHJlc3Npb25zIGRlIHJlbXBsYWNlbWVudCBzdWl2YW50ZXM6ICANCg0KMS4gYHZhbHVlLnJlcGxhY2UoIiMiLCAiYXVjdW4iKWAgICANCihyZW1wbGFjZSBsZSBjYXJhY3TDqHJlICM6IGF1Y3VuIGV0IGF1Y3VuTi9EICkgICAgIA0KIA0KMi4gYGlmKHZhbHVlLmNvbnRhaW5zKCIjIiksImF1Y3VuIiwgdmFsdWUpYCAgIA0KKHJlbXBsYWNlIGxlcyBjZWxsdWxlcyBkZXMgIyBldCAjTkQgcGFyIGF1Y3VuKSAgDQoNCjMuIGBpZih2YWx1ZT09KCIjIiksImF1Y3VuIiwgdmFsdWUpYCAgICAgDQoocmVtcGxhY2Ugc2V1bGVtZW50IGxlcyBjZWxsdWxlcyAjLCBwYXMgbGVzICNORCBwYXIgYXVjdW4pIA0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KKioqDQoNCiMjIDkuNS4gQ3LDqWVyIGV0IGNvcGllciBkZXMgY29sb25uZXMNCg0KPC9icj4NCg0KYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmVgDQoNCiFbXShpbWFnZXMvT1IzMi5qcGcpDQoNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBzdXIgbGEgYmFzZSBkZSBsYSBjb2xvbm5lICpKb3VyIGRlIGxhIHNlbWFpbmUqIGluZGlxdWFudCBzaSBsZSBqb3VyIGVzdCBlbiBzZW1haW5lIG91IGZpbiBkZSBzZW1haW5lLg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KYGlmKHZhbHVlID4gNSwiZmluIGRlIHNlbWFpbmUiLCJzZW1haW5lIilgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNyw6llciB1bmUgY29sb25uZSDDoCBwYXJ0aXIgZGUgbGEgY29sb25uZSAqaGV1cmUgZGUgbCdpbmNpZGVudCogZW4gbmUgY29uc2VydmFudCBxdWUgbCdoZXVyZSwgc2FucyBsZXMgbWludXRlcywgZXQgcmFqb3V0ZXIgbGEgbGV0dHJlIGggcG91ciBkb25uZXIgcGFyIGV4ZW1wbGUgY2VjaTogMTU6MTIgIC0+ICAxNWguICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCmB2YWx1ZS5zcGxpdCgnOicpWzBdICsgImgiYC4gIA0KDQpPdQ0KDQpgdmFsdWUuc3BsaXRCeUxlbmd0aHMoMilbMF0gKyAiaCJgLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQoqKioNCg0KDQojIDEwLiBMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHsjZXhwcmVzc2lvbn0NCg0KIyMgMTAuMS4gQ2FyYWN0w6lyaXN0aXF1ZXMgIA0KDQotIEwndXNhZ2UgZGUgR1JFTCBwZXJtZXQgZGVzIG1hbmlwdWxhdGlvbnMgZGUgZG9ubsOpZXMgYmVhdWNvdXAgcGx1cyBhdmFuY8OpZXMgcXVlIGwndXRpbGlzYXRpb24gZGVzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzLCBtYWlzIE9wZW5SZWZpbmUgcGVybWV0IGVuIHBsdXMgZGUgY29tYmluZXIgbCd1dGlsaXNhdGlvbiBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIGF2ZWMgR1JFTCBwb3VyIGVuIGF1Z21lbnRlciBsYSBwdWlzc2FuY2UuIA0KLSBMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHBlcm1ldHRlbnQsIMOgIHBhcnRpciBkJ3VuZSBzeW50YXhlIHNww6ljaWZpcXVlLCBkJ2lkZW50aWZpZXIgZGVzIHBhdHRlcm5zIGRhbnMgdW4gY29udGVudS4gIA0KLSBMb3JzcXUndXRpbGlzw6llcyBhdmVjIEdSRUwsIGNlcyBleHByZXNzaW9ucyBwZXJtZXR0ZW50IGRvbmMgZCdpZGVudGlmaWVyIGV0IGQnZXh0cmFpcmUgZGVzIGNvbnRlbnVzIHRyw6hzIHByw6ljaXMgcG91ciBlbnN1aXRlIGxlcyBtYW5pcHVsZXIgc2Vsb24gbGVzIGJlc29pbnMuICANCi0gRWxsZXMgcGV1dmVudCDDqnRyZSB1dGlsaXPDqWVzIMOgIGRpZmbDqXJlbnRzIGVuZHJvaXRzIGRhbnMgT3BlblJlZmluZSBldCBkb2l2ZW50IHRvdWpvdXJzIMOqdHJlIGVudG91csOpZXMgZGUgYC8gL2A6IGZpbHRyZXMsIGZhY2V0dGVzLCBmZW7DqnRyZSBHUkVMLg0KLSBDZXJ0YWluZXMgZXhwcmVzc2lvbnMgcGV1dmVudCBzJ8OpY3JpcmUgZW4gR1JFTCBhdmVjIG91IHNhbnMgcmVnZXguICANCi0gTGVzIGZvbmN0aW9ucyBHUkVMIHF1aSBhY2NlcHRlbnQgbGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlczogYHJlcGxhY2VgLCBgbWF0Y2hgLCBgcGFydGl0aW9uYCwgYHJwYXJ0aXRpb25gLCBgc3BsaXRgLg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMzMuanBnKQ0KDQoNCi0gTWFpcyBjZXJ0YWluZXMgZm9uY3Rpb25zIChjb21tZSBgbWF0Y2hgKSBuJ2FjY2VwdGVudCBxdWUgY2VzIGV4cHJlc3Npb25zLiAgDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KDQpMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHBldXZlbnQgw6p0cmUgdXRpbGlzw6llcyBhdmVjIHBsdXNpZXVycyBhdXRyZXMgbGFuZ2FnZXMgZG9udCBbUl0oaHR0cHM6Ly90b3dhcmRzZGF0YXNjaWVuY2UuY29tL2EtZ2VudGxlLWludHJvZHVjdGlvbi10by1yZWd1bGFyLWV4cHJlc3Npb25zLXdpdGgtci1kZjVlODk3Y2E0MzIpIGV0IFtQeXRob25dKGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vcmVnZXguaHRtbCkgZXQgZGFucyBkZXMgbG9naWNpZWxzIHF1aSBuJ29udCByaWVuIMOgIHZvaXIgYXZlYyBsZXMgc3RhdGlzdGlxdWVzIGNvbW1lIFtPcGVuT2ZmaWNlXShodHRwczovL3dpa2kub3Blbm9mZmljZS5vcmcvd2lraS9Eb2N1bWVudGF0aW9uL0hvd19Ub3MvUmVndWxhcl9FeHByZXNzaW9uc19pbl9Xcml0ZXIpLg0KDQpQb3VyIGVuIHNhdm9pciBwbHVzOiAgDQotIGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9VbmRlcnN0YW5kaW5nLVJlZ3VsYXItRXhwcmVzc2lvbnMgIA0KLSBodHRwczovL3JlZ2V4MTAxLmNvbS8gIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMjIDEwLjIuIExhIHN5bnRheGUgZGUgYmFzZTogICANCg0KTGEgc3ludGF4ZSBlc3QgY29tcG9zw6llIGQnw6lsw6ltZW50cyBwZXJtZXR0YW50IGRlICBjaWJsZXIgZGVzIGNhcmFjdMOocmVzIHByw6ljaXMgZXQgZGUgZMOpZmluaXIgbGV1ciBlbXBsYWNlbWVudCBldCBsZXVyIG9jY3VycmVuY2UuDQoNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgVFlQRVMgREUgQ0FSQUNUw4hSRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVVBTlRJRklDQVRFVVJTIEVUIEVNUExBQ0VNRU5UICAgICAgICAgICAgICAgICB8IA0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kw0KfCBgLmAgOiBO4oCZaW1wb3J0ZSBxdW9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYCtgIDogMSBvdSBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBcd2AgOiBuJ2ltcG9ydGUgcXVlbCBtb3QsIGNoaWZmcmUgb3UgXyAgKGBcV2AgOiBzYXVmKSAgICAgfCBgKmAgOiAwIG91IHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgXGRgIDogQ2hpZmZyZXMgICAgICAoYFxEYCA6IHNhdWYpICAgICAgICAgICAgICAgICAgICB8IGA/YCA6IDAgb3UgdW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFxzYCA6IEVzcGFjZXMgICAgICAgICAoYFxTYCA6IHNhdWYpICAgICAgICAgICAgICAgICAgfCBgezJ9YCA6IE5vbWJyZSBleGFjdCAoaWNpIDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgW0EtWl1gIDogTWFqdXNjdWxlcyAgICAgKGBbXkEtWl1gIDogc2F1ZikgICAgICAgICAgICB8IGB7LDR9YCA6IEVudHJlIDAgZXQgNCBpbmNsLiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFthLXpdYCA6IE1pbnVzY3VsZXMgICAgICAoYFteYS16XWAgOiBzYXVmKSAgICAgICAgICAgfCBgezQsfWAgOiA0IG91IHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFthYmQ7XWAgOiBsZXMgbGV0dHJlcyBhLCBiLCBjLCBkIGV0IGxlIDsgICAgICAgICAgICAgfCBgezE7M31gIDogMSBPVSAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgYWJjZGAgOiB1bmUgb3UgcGx1c2lldXJzIGxldHRyZXMgZXhhY3RlcyAgICAgICAgICAgICB8IGB7MSwzfWAgOiBFbnRyZSAxIGV0IDMgaW5jbC4gICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGB8YCA6IE91ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBeYCA6IETDqWJ1dCBkJ3VuZSBsaWduZSAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGAoKWAgOiBHcm91cGVyIHVuIGNvbnRlbnUgZXQgbGUgZ2FyZGVyIGVuIG3DqW1vaXJlICAgICAgfCBgJGAgOiBGaW4gZCd1bmUgbGlnbmUgb3UgcmFwcGVsZXIgdW4gZ3JvdXBlICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCAgYFxgIDogQ2hlcmNoZXIgdW4gY2FyYWN0w6hyZSBzcMOpY2lhbCBsaXR0w6lyYWxlbWVudCAgICB8IFNhbnMgcXVhbnRpZmljYXRldXIsIGwnb2NjdXJyZW5jZSBlc3QgZGUgMSAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCg0KIyMjIyMgUGFyIGV4ZW1wbGUsIGplIGNoZXJjaGUgdW4gY29udGVudSBjb3JyZXNwb25kYW50IGF1IG1vdGlmOiAgDQoNCmBeXGR7NH0gK1tBLVpdXC5gICAgIA0KICAgDQotIGTDqWJ1dGUgcGFyIDQgY2hpZmZyZXMgICANCi0gc3VpdmkgZCd1biBlc3BhY2Ugb3UgcGx1cyAgIA0KLSBzdWl2aSBkJ3VuZSBsZXR0cmUgbWFqdXNjdWxlIGF2ZWMgdW4gcG9pbnQgICANCg0KPC9icj4NCg0KIyMjIyMgQXV0cmVzIGV4ZW1wbGVzIGF2ZWMgbGEgc3ludGF4ZSBPcGVuUmVmaW5lOg0KDQotIGB2YWx1ZS5maW5kKC9bQ2NdYXJvbGluZS8pYDogQ2Fyb2xpbmUgZXQgY2Fyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2Ercm9saW5lLylgOiBjYXJvbGluZSBldCBjYWFhYXJvbGluZQ0KDQotIGB2YWx1ZS5maW5kKC9jYSpyb2xpbmUvKWA6IGNhcm9saW5lLCBjYWFhcm9saW5lIGV0IGNyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2E/cm9saW5lLylgOiBjYXJvbGluZSBldCBjcm9saW5lIG1haXMgcGFzIGNhYWFyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2F7NH1yb2xpbmUvKWA6IGNhYWFhcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL15DYXJvbFxiLylgOiBDYXJvbCBlbiBkw6lidXQgZCdleHByZXNzaW9uLCBtYWlzIHBhcyBDYXJvbGluZSAoXGIgPSAiYm91bmRhcnkiKQ0KDQotIGB2YWx1ZS5maW5kKC9jW2Etel17Nn1lLylgOiBjICsgNiBtaW51c2N1bGVzICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DW2EtekEtWjAtOV17Nn1lLylgOiBDICsgNiBtaW51c2N1bGVzLCBtYWp1c2N1bGVzIG91IGNoaWZmcmVzICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DXHd7Nn1lLylgOiBDICsgW0EtWmEtejAtOV9dICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DLns2fWUvKWA6IEMgKyA2IG4naW1wb3J0ZSBxdW9pICsgZQ0KDQoNCioqKg0KDQojIyBFeGVyY2ljZQ0KDQojIyMgTWFuaXB1bGVyIGxlcyDDqWzDqW1lbnRzIGRlIHLDqWbDqXJlbmNlcyBiaWJsaW9ncmFwaGlxdWVzDQoNCiFbXShpbWFnZXMvT1IzNi5qcGcpDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoxLiBBbGxlciBzdXIgbGUgW2d1aWRlIEFQQV0oaHR0cHM6Ly9iaWIudW1vbnRyZWFsLmNhL2NpdGVyL3N0eWxlcy1iaWJsaW9ncmFwaGlxdWVzL2FwYT90YWI9MzI4MSkuICAgICANCjIuIENvcGllciBsZXMgZGV1eCByw6lmw6lyZW5jZXMgZGUgTGVtYWlyZSBldCBMZWJvdmljaSBhdSBwb2ludCAyLjEuICAgICAgDQozLiBEYW5zIE9wZW5SZWZpbmUsIGNsaXF1ZXIgc3VyIGxlIHBldGl0IGxvZ28gZW4gaGF1dCDDoCBnYXVjaGUgLT4gYENyw6llciB1biBwcm9qZXRgIC0+IGBQcmVzc2UtcGFwaWVyYDogQ29sbGVyIGxlcyBkZXV4IHLDqWbDqXJlbmNlcyBlbiAgYWpvdXRhbnQgdW4gc8OpcGFyYXRldXIgKioiOyIqKiDDoCBsYSBmaW4gZGUgbGEgcHJlbWnDqHJlIC0+IFN1aXZhbnQuICAgICAgIA0KDQo0LiBNb2RpZmllciBsZXMgb3B0aW9uczogDQogIC0gTGVzIGNvbG9ubmVzIHNvbnQgc8OpcGFyw6llcyBwYXIgLSBwZXJzb25uYWxpc8OpICI7Ii4gIA0KICAtIETDqWNvY2hlciAiQW5hbHlzZXIgbGEgb3UgbGVzCTEgbGlnbmUocykgc3VpdmFudGUocykgY29tbWUgZGVzIGVudMOqdGVzIGRlIGNvbG9ubmVzIi4gIA0KNS4gQ3LDqWVyIHByb2pldC4gICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KNi4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmVgICANCg0KNy4gRXhhbWluZXIgbCdpbXBhY3QgZGUgY2VzIGRldXggY29tbWFuZGVzICoqR1JFTCArIHJlZ2V4KiouIFF1J2VzdC1jZSBxdWkgc2UgcGFzc2U/DQoNCi0gw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtZXI6IA0KDQo+IGB2YWx1ZS5maW5kKC9cKC4qP1wpLylgICANCg0KPiBgdmFsdWUuZmluZCgvXCguKj9cKS8pLmpvaW4oJywnKS5yZXBsYWNlKCIoIiwiICIpLnJlcGxhY2UoIikiLCAiIilgICANCg0KLT4gQXR0ZW50aW9uIGF1eCBbcXVhbnRpZmljYXRldXJzICJnb3VybWFuZHMiXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvc3RhbmRhcmQvYmFzZS10eXBlcy9xdWFudGlmaWVycy1pbi1yZWd1bGFyLWV4cHJlc3Npb25zI2dyZWVkeS1hbmQtbGF6eS1xdWFudGlmaWVycykgKHZzIHBhcmVzc2V1eCkuDQoNCjwvYnI+DQoNCsOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmU6ICANCg0KICAtIENyw6llciBsYSBjb2xvbm5lIEF1dGV1ciA6IGB2YWx1ZS5wYXJ0aXRpb24oIigiKVswXWAgb3UgYHZhbHVlLnNwbGl0KCIoIilbMF1gICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgQW5uw6llOiBgdmFsdWUucGFydGl0aW9uKCIoIilbMl0ucGFydGl0aW9uKCIpIilbMF1gICAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKj8oXGR7NH0pLio/LylbMF1gLiAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB0aXRyZTogYHZhbHVlLnBhcnRpdGlvbigiKS4iKVsyXS5wYXJ0aXRpb24oIigiKVswXWAuICAgICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgw6lkaXRldXI6IGB2YWx1ZS5wYXJ0aXRpb24oIikuIilbMl0ucGFydGl0aW9uKCIpLiIpWzJdYC4gICAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIMOpZGl0aW9uOiBgdmFsdWUucGFydGl0aW9uKCIpLiIpWzJdLnBhcnRpdGlvbigiKCIpWzJdLnBhcnRpdGlvbigiw6lkIilbMF1gIG91IGF2ZWMgcmVnZXg6IGB2YWx1ZS5tYXRjaCgvLiooXGQrKS4gw6lkLiovKVswXWAuICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB2b2x1bWU6IGB2YWx1ZS5wYXJ0aXRpb24oInZvbC4iKVsyXS5wYXJ0aXRpb24oIikiKVswXWAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKnZvbC4gKFxkKykuKi8pWzBdYC4gIA0KTWFpcyBlbmNvcmUgYXZlYyByZWdleDogIA0KLSBTdXBwcmltZXIgbGVzIGxldHRyZXMgZHUgcHLDqW5vbTogYHZhbHVlLnJlcGxhY2UoLyhcc1tBLVpdLlxzKXwoXHNbQS1aXS4sXHMpLywgIiAiKWAuICANCi0gU3VwcHJpbWVyIHRvdXQgbGUgY29udGVudSBzYXVmIGxlcyBub21zIGRlIGZhbWlsbGU6IGB2YWx1ZS5yZXBsYWNlKC8oXHNbQS1aXS5ccyl8KFxzW0EtWl0uLFxzKXwoZXQpfCgsKS8sICIgIilgLiAgDQoNCjwvYnI+DQoNCioqKg0KDQojIDExLiBUcmFuc3Bvc2l0aW9uDQoNCiMjIEV4ZXJjaWNlOiB0cmFuc3Bvc2VyIHVuIHRhYmxlYXUgZCdpbmRpY2F0ZXVycyBkdSBXREkNCjwvYnI+DQoNCioqRmljaGllciBvcmlnaW5hbCB0w6lsw6ljaGFyZ8OpIGRlIGxhIFtCYW5xdWUgbW9uZGlhbGVdKGh0dHBzOi8vZGF0YWJhbmsuYmFucXVlbW9uZGlhbGUub3JnL3JlcG9ydHMuYXNweD9zb3VyY2U9d29ybGQtZGV2ZWxvcG1lbnQtaW5kaWNhdG9ycykgZW4gZm9ybWF0IC5jc3YgY29tcG9zw6kgZGUgNSBwYXlzIGV0IDQgaW5kaWNhdGV1cnMgw6AgbCdob3Jpem9udGFsZSBldCAzIGFubsOpZXMgw6AgbGEgdmVydGljYWxlKiogIA0KDQotIFBvdXIgb3V2cmlyIGxlIGZpY2hpZXIgw6AgcGFydGlyIGRlIHNvbiBlbXBsYWNlbWVudCBzdXIgR2l0aHViOiBodHRwczovL2dpdGh1Yi5jb20vQ1JMTlAvb3BlbnJlZmluZSANCiAgLSBDbGlxdWVyIHN1ciBsZSBmaWNoaWVyICpXRElfRGF0YV9FeHRyYWN0LmNzdiogLT4gQ2xpcXVlciBzdXIgbGUgYm91dG9uIFJBVyAtPiBjb3BpZXIgbCdhZHJlc3NlIGR1IG5hdmlnYXRldXIuDQogIC0gRGFucyBPcGVuUmVmaW5lLCBDcsOpZXIgdW4gcHJvamV0IC0+IEFkcmVzc2VzIHdlYiAoVVJMcykgLT4gY29sbGVyIGxlIGxpZW4uDQogIA0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2UxLmpwZykNCg0KPC9icj4NCg0KKioxLiBUcmFuc3Bvc2VyIGxlcyBkYXRlcyDDoCBsJ2hvcml6b250YWxlIChmb3JtYXQgKmxvbmcqKSoqICANCg0KPC9icj4NCg0KKsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zcG9zZXIgLT4gVHJhbnNwb3NlciBsZXMgY2VsbHVsZXMgZGUgcGx1c2lldXJzIGNvbG9ubmVzIGVuIGxpZ25lcy4uLioNCg0KDQo8L2JyPg0KDQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlMi5qcGcpDQoNCjwvYnI+DQoNCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2UzLmpwZykNCg0KPC9icj4NCg0KKioyLiBSZW1wbGlyIGF1dG9tYXRpcXVlbWVudCBsZXMgY2VsbHVsZXMgdmlkZXMgZGVzIGRldXggY29sb25uZXMgw6AgbGEgdmVydGljYWxlKioNCg0KKsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFJlY29waWVyIGxlcyB2YWxldXJzIGRhbnMgbGVzIGNlbGx1bGVzIHZpZGVzIGNvbnPDqWN1dGl2ZXMqDQoNCjwvYnI+DQoNCioqMy4gVHJhbnNwb3NlciBsZXMgaW5kaWNhdGV1cnMgZW4gdmFyaWFibGVzIMOgIGxhIHZlcnRpY2FsZSoqDQoNCipUcmFuc3Bvc2VyIC0+IENvbnZlcnRpciBlbiBsaXN0ZSBsZXMgY29sb25uZXMgZGUgY2zDqS92YWxldXIuLi4qDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlNC5qcGcpDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlNS5qcGcpDQoNCjwvYnI+DQoNCg0KKioqDQoNCiMgMTIuIEV4cG9ydGVyIHVuIGZpY2hpZXIgZXQgZmVybWVyIE9wZW5SZWZpbmUNCg0KLSBGb25jdGlvbiDDoCB1dGlsaXNlciBsb3JzcXVlIGwnb24gZXN0IHByw6p0IMOgIGV4cG9ydGVyIHNvbiBmaWNoaWVyIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgcG91ciB0cmF2YWlsbGVyIGRhbnMgdW4gYXV0cmUgbG9naWNpZWwgKC5jc3YsIC54bHMuLi4pDQotIE9SIHNhdXZlZ2FyZGUgYXV0b21hdGlxdWVtZW50IGxlcyBmaWNoaWVycyBzb3VzIGZvcm1lIGQnYXJjaGl2ZXMgZGUgcHJvamV0IGRhbnMgdW4gZG9zc2llciBzdXIgbGUgcG9zdGUgZGUgdHJhdmFpbCBhdXhxdWVsbGVzIG9uIHBldXQgYWNjw6lkZXIgZW4gY2xpcXVhbnQgc3VyIGBPdXZyaXIgdW4gcHJvamV0YCBzdXIgbGEgcGFnZSBwcmluY2lwYWxlLg0KLSBMJ291dGlsIGBFeHBvcnRldXIgdGFidWxhaXJlIHBlcnNvbm5hbGlzw6lgIGVzdCB0csOocyB1dGlsZSBwb3VyIHBhcmFtw6l0cmVyIGwnZXhwb3J0YXRpb24gKHPDqWxlY3Rpb24gZGUgY29sb25uZXMsIGZvcm1hdCBkZSBkYXRlcywgZm9ybWF0IGRlIGZpY2hpZXIuLi4pDQotIEZlcm1lciBsJ29uZ2xldCBuZSBmZXJtZSBwYXMgbGUgc2VydmV1ciBxdWkgY29udGludWVyYSDDoCByb3VsZXIgZW4gYXJyacOocmUtcGxhbi4NCi0gQWxsZXIgw6AgbGEgZmVuw6p0cmUgbm9pcmUgZHUgdGVybWluYWwgZXQgdXRpbGlzZXIgbGVzIHRvdWNoZXMgQ1RSTCArIEMganVzcXUnw6AgY2UgcXUnZWxsZSBzZSBmZXJtZSBkJ2VsbGUtbcOqbWUgKGlsIGVzdCBwYXJmb2lzIG7DqWNlc3NhaXJlIGRlIHLDqXDDqXRlciDDoCBwbHVzIGQndW5lIHJlcHJpc2UpLiBMZSBmaWNoaWVyIHNlcmEgZW5yZWdpc3Ryw6kgdW5lIGRlcm5pw6hyZSBmb2lzIGV0IGxlIGxvZ2ljaWVsIHNlcmEgIG1haW50ZW5hbnQgYmVsIGV0IGJpZW4gZmVybcOpLg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDEzLiBRdWVscXVlcyByZWNldHRlcyBwb3VyIGZhaXJlIGR1cmVyIGxlIHBsYWlzaXINCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgRXh0cmFpcmUgc2V1bGVtZW50IGNlcnRhaW5zIGNhcmFjdMOocmVzIHNlbG9uIGxldXIgcG9zaXRpb24NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KRXh0cmFpcmUgc2V1bGVtZW50IGxlcyBjYXJhY3TDqHJlcyBkZSA1IMOgIDcgIA0KDQotIHZhbHVlWzUsIDddDQoNCkV4dHJhaXJlIGxlcyBjYXJhY3TDqHJlcyDDoCBwYXJ0aXIgZGUgNSAgDQoNCi0gdmFsdWUuc3Vic3RyaW5nKDUpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgU2F2b2lyIHNpIHVuZSBjb25kaXRpb24gZXN0IHZyYWllIG91IGZhdXNzZT8NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkVzdC1jZSBxdWUgbGUgY29udGVudSBkZXMgdmFsZXVycyBjb3JyZXNwb25kIMOgICIyMDE5LTAxLTAxIiAgDQoNCi0gdmFsdWU9PSIyMDE5LTAxLTAxIg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbm5hw650cmUgbGEgbG9uZ3VldXIgZGVzIHZhbGV1cnMgZCd1bmUgY29sb25uZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS5sZW5ndGgoKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbXB0ZXIgbGUgbm9tYnJlIGRlIG1vdHMgZGFucyBkZXMgY2VsbHVsZXMgKHPDqXBhcsOpcyBwYXIgZGVzIGVzcGFjZXMpDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLnNwbGl0KCIgIikubGVuZ3RoKCkgb3UgdmFsdWUuc3BsaXQoL1xzLykubGVuZ3RoKCkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDYWxjdWwgZCd1biBwb3VyY2VudGFnZSBhcnJvbmRpIChleCBkJ3VuIHLDqXN1bHRhdCBzdXIgMTApDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHJvdW5kKCh2YWx1ZSoxMDApIC8gMTApDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgVHJhbnNmb3JtZXIgdW4gZm9ybWF0IGRhdGUgZW4gZm9ybWF0IHRleHRlIHBsdXMgbGlzaWJsZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS50b1N0cmluZygiZGQgTU1NTSB5eXl5IikNCg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgTGEgY3LDqWF0aW9uIGV0IG1hbmlwdWxhdGlvbiBkZSBsaXN0ZXMgKCphcnJheSopIC0gRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIGVuIGZvbmN0aW9uIGQndW4gc8OpcGFyYXRldXIgcG91ciBuZSBjb25zZXJ2ZXIgcXVlIGxlIHByZW1pZXIgw6lsw6ltZW50ICAgIA0KDQotIHZhbHVlLnNwbGl0KCIgIilbMF0NCg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgcG91ciBsZSByw6lvcmRvbm5lciANCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnJldmVyc2UoKS5qb2luKCIsIikNCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnNvcnQoKS5qb2luKCIsIikNCg0KRGl2aXNlciBhcHLDqHMgbGVzIDMgcHJlbWllcnMgY2FyYWN0w6hyZXMgZXQgY29uc2VydmVyIGxlIHByZW1pZXIgw6lsw6ltZW50ICANCg0KLSB2YWx1ZS5zcGxpdEJ5TGVuZ3RocygzKVswXSANCg0KRGl2aXNlciBzZWxvbiBsZSB0eXBlIGRlIGNhcmFjdMOocmVzIGV0IHJldGVuaXIgbGUgZGV1eGnDqG1lIMOpbMOpbWVudCAgDQoNCi0gdmFsdWUuc3BsaXRCeUNoYXJUeXBlKClbMV0NCg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgc3VyIHVuIHRlcm1lIHggZXQgY29uc2VydmVyIGxlIGNvbnRlbnUgcHLDqWPDqWRlbnQgDQoNCi0gdmFsdWUucGFydGl0aW9uKCJ0ZXJtZSIpWzBdDQoNCi0gdmFsdWUucGFydGl0aW9uKCIgdG8gIilbMl0ucGFydGl0aW9uKCIgb24gIilbMF0NCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEludmVyc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgZXQgaW52ZXJzZXIgbCdvcmRyZSBkZSBwcsOpc2VudGF0aW9uIGVuIGFqb3V0YW50IHVuZSB2aXJndWxlIGVudHJlIGxlcyBkZXV4ICANCg0KLSB2YWx1ZS5zcGxpdCgnICcpWzFdICsgIiwiICsgIiAiICsgdmFsdWUuc3BsaXQoJyAnKVswXQ0KDQpPVQ0KDQotIHZhbHVlLm1hdGNoKC8oLiopLCguKikvKS5yZXZlcnNlKCkuam9pbigiICIpDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBBam91dGVyIHVuIHrDqXJvIHBvdXIgYXZvaXIgdW4gbm9tYnJlIGRlIGNhcmFjdMOocmVzIHByw6ljaXMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkFqb3V0ZXIgdW4gesOpcm8gZGV2YW50IGxlIGNvbnRlbnUgc2kgZG9ubmUgdW5lIGNoYWluZSBkZSAwIMOgIDIgY2FyYWN0w6hyZXMgIA0KDQotICIwIlswLDItbGVuZ3RoKHZhbHVlKV0gKyB2YWx1ZQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEFwcGxpcXVlciBkZXMgY29uZGl0aW9ucw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRm9uY3Rpb24gaWYgLSBtw6ptZSBjaG9zZSBxdWUgZGFucyBleGNlbCAgDQoNCi0gaWYodGVzdCwgc2kgdGVzdCBlc3QgdnJhaSwgc2kgdGVzdCBlc3QgdnJhaSkNCg0KU2kgbGEgY2VsbHVsZSBjb250aWVudCB4LCDDqWNyaXJlIHgsIHNpbm9uIHkNCg0KLSBpZih2YWx1ZS5jb250YWlucygieCIpLCAieCIsICJ5IikNCiANCi0gaWYodmFsdWUuY29udGFpbnMoIjEiKSwgdmFsdWUsIG51bGwpDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDb21wYXJlciBkZXV4IGNvbG9ubmVzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpJZGVudGlmaWVyIHNpIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGQndW5lIGNvbG9ubmUgZXN0IHBhcmVpbCDDoCB1bmUgYXV0cmUgIA0KDQotIHZhbHVlID09IGNlbGxzWydhdXRyZS1jb2xvbm5lJ10udmFsdWUNCg0KRXN0LWNlIHF1ZSBsZSBwcmVtaWVyIGNhcmFjdMOocmUgZGUgbGEgY29sb25uZSB4IGVzdCBsZSBtw6ptZSBxdWUgbGEgY29sb25uZSB5ICANCg0KLSBjZWxsc1siY29sb25uZTEiXS52YWx1ZVswXSA9PSBjZWxsc1siY29sb25uZTIiXS52YWx1ZVswXQ0KDQpDb21wYXJlciBsZSBjb250ZW51IGRlIGRldXggY29sb25uZXMgZXQgbW9kaWZpZXIgbGVzIHZhbGV1cnMgc2Vsb24gbGUgcsOpc3VsdGF0IGRlIGxhIGNvbmRpdGlvbiAgDQoNCi0gaWYoY2VsbHNbImNvbG9ubmUxIl0udmFsdWUgPT0gY2VsbHNbImNvbG9ubmUyIl0udmFsdWUsICJQYXJlaWwiLCAiUGFzIHBhcmVpbCIpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgVsOpcmlmaWVyIGxlIGZvcm1hdCBkJ3VuZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gdmFsdWUudHlwZSgpICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBGYWlyZSBkZXMgY2FsY3VscyBzaW1wbGVzICh2YWxldXJzIG51bcOpcmlxdWVzKQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpTb21tZSBkJ3VuZSBjb2xvbm5lIHBsdXMgdW5lIGF1dHJlICANCg0KLSB2YWx1ZSArIGNlbGxzWydKb3VyIGR1IG1vaXMnXS52YWx1ZQ0KDQpBcnJvbmRpciBsZSBjb250ZW51ICANCg0KLSByb3VuZCh2YWx1ZSkNCjwvZGl2Pg0KDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFJlcHJlbmRyZSBldCBjb25jYXTDqW5lciBsZSBjb250ZW51IGQndW5lIGF1dHJlIGNvbG9ubmUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkNyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBlbiBmdXNpb25uYW50IGxlIGNvbnRlbnUgZGUgZGV1eCBhdXRyZXMgZXQgYWpvdXRlciBkdSB0ZXh0ZSAgDQoNCi0gY2VsbHNbJ25vbSddLnZhbHVlICsgY2VsbHNbJ25vbSddLnZhbHVlICsgIkJvbmpvdXIhIg0KDQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgYXZlYyBsZXMgdHJvaXMgcHJlbWllcnMgY2FyYWN0w6hyZXMgc2V1bGVtZW50ICANCg0KLSBjZWxsc1snU3ltcHRvbWUnXS52YWx1ZVswLDNdDQoNClRyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZCd1bmUgY29sb25uZSBlbiBjb25jYXTDqW5hbnQgbGUgY29udGVudSBkJ3VuZSBhdXRyZSAgDQoNCi0gdmFsdWUgKyAnICcgKyBjZWxsc1snc3RyZWV0LXR5cGUnXS52YWx1ZQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFJlbXBsYWNlciBkZXMgY2FyYWN0w6hyZXMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KUmVtcGxhY2VyIHRvdXQgbGUgY29udGVudSBkJ3VuZSBjb2xvbm5lIChpY2ksIHZpZGVyIGxhIGNvbG9ubmUpICANCg0KLSB2YWx1ZS5yZXBsYWNlKHZhbHVlLCAiIikNCg0KUmVtcGxhY2VyIHVuZSBsZXR0cmUgcGFyIHVuZSBhdXRyZSAgDQoNCi0gdmFsdWUucmVwbGFjZUNoYXJzKCJvIiwgImEiKQ0KDQpGYWlyZSBwbHVzaWV1cnMgcmVtcGxhY2VtZW50cyBkJ3VuIGNvdXAgIA0KDQotIHZhbHVlLnJlcGxhY2UoIjEiLCAidW4iKS5yZXBsYWNlKCIyIiwgImRldXgiKS5yZXBsYWNlKCIzIiwgInRyb2lzIikNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBJZGVudGlmaWVyIGRlcyBjZWxsdWxlcyBxdWkgY29tbWVuY2VudCBwYXIuLi4gKHLDqXN1bHRhdCBib29sw6llbikNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KLSB2YWx1ZS5zdGFydHNXaXRoKCJCZXJyaSIpICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFN1cHByaW1lciB1biBjYXJhY3TDqHJlIGRlIGTDqWJ1dCBvdSBmaW4gZGUgdmFsZXVyOg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpTdXBwcmltZSDigJxT4oCdIGR1IGTDqWJ1dCBkZSBsYSBjZWxsdWxlICANCg0KLSB2YWx1ZS5yZXBsYWNlKC9eUy8sIiIpIFtyZWdleCBeIGluZGlxdWUgbGUgZMOpYnV0IGQndW5lIGNlbGx1bGVdDQoNClN1cHByaW1lICIuIiDDoCBsYSBmaW4gZGUgbGEgY2VsbHVsZSAgDQoNCi0gdmFsdWUucmVwbGFjZSgvXC4kLywiIikgW3JlZ2V4ICQgaW5kaXF1ZSBsYSBmaW4gZCd1bmUgY2VsbHVsZV0NCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpNb2RpZmllci9zdXBwcmltZXIgbGEgcG9uY3R1YXRpb24NCg0KLSB2YWx1ZS5yZXBsYWNlKC9ccHtQdW5jdH0vLCcgJykNCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFRyYXZhaWxsZXIgYXZlYyB1biBmb3JtYXQgZGF0ZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRXh0cmFpcmUgc2V1bGVtZW50IHVuZSBwYXJ0aWUgZCd1bmUgZGF0ZSAgDQoNCi0gdmFsdWUudG9EYXRlKCkuZGF0ZVBhcnQoInllYXIiKSAgDQoNCi0gIGRpZmYobm93KCksdmFsdWUsJ3dlZWtzJykgIA0KDQo8L2Rpdj4NCg0KDQoqKioNCg0KDQojIDE0LiBSZXNzb3VyY2VzDQoNCi0gW1NpdGUgZXQgZG9jdW1lbnRhdGlvbiBvZmZpY2llbHNdKGh0dHBzOi8vb3BlbnJlZmluZS5vcmcvKQ0KDQotIEpvaG4gTGl0dGxlLCAyMDE4LCBbQ2xlYW5pbmcgRGF0YSB3aXRoIE9wZW5SZWZpbmVdKGh0dHBzOi8vbGliam9obi5naXRodWIuaW8vb3BlbnJlZmluZS9pbmRleC5odG1sKSAgDQoNCi0gRXZhbiBXaWxsLCAyMDIxLCBbR2V0IFN0YXJ0ZWQgd2l0aCBPcGVuUmVmaW5lOiBFeHBsb3JlLCBDbGVhbiwgYW5kIFRyYW5zZm9ybSB5b3VyIERhdGEhXShodHRwczovL2V2YW53aWxsLmdpdGh1Yi5pby9vcGVucmVmaW5lLWIvKSAgDQoNCi0gVUNMQSwgMjAxOSwgW0dldHRpbmcgc3RhcnRlZCB3aXRoIE9wZW5SZWZpbmUgRGlnaXRhbCBIdW1hbml0aWVzIDIwMV0oaHR0cDovL21pcmlhbXBvc25lci5jb20vY2xhc3Nlcy9kaDIwMXcxOS90dXRvcmlhbHMtZ3VpZGVzL2RhdGEtY2xlYW5pbmctYW5kLW1hbmlwdWxhdGlvbi9nZXR0aW5nLXN0YXJ0ZWQtd2l0aC1vcGVucmVmaW5lLykNCg0KLSBbUmVmaW5lUHJvIEtub3dsZWRnZSBCYXNlIGZvciBPcGVuUmVmaW5lXShodHRwczovL2tiLnJlZmluZXByby5jb20vKQ0KDQotIFNldGggdmFuIEhvb2xhbmQsIFJ1YmVuIFZlcmJvcmdoLCBhbmQgTWF4IERlIFdpbGRlLCBbQ2xlYW5pbmcgRGF0YSB3aXRoIE9wZW5SZWZpbmVdKGh0dHBzOi8vcHJvZ3JhbW1pbmdoaXN0b3JpYW4ub3JnL2VuL2xlc3NvbnMvY2xlYW5pbmctZGF0YS13aXRoLW9wZW5yZWZpbmUpDQoNCi0gW0ludHJvZHVjdGlvbiB0byBPcGVuUmVmaW5lXShodHRwczovL2RvYW5hLmdpdGJvb2tzLmlvL3Rlc3QvY29udGVudC8pDQoNCi0gRGF0YSBDYXJwZW50cnksIFtEYXRhIENsZWFuaW5nIHdpdGggT3BlblJlZmluZSBmb3IgRWNvbG9naXN0c10oaHR0cHM6Ly9kYXRhY2FycGVudHJ5Lm9yZy9PcGVuUmVmaW5lLWVjb2xvZ3ktbGVzc29uLzAwLWdldHRpbmctc3RhcnRlZC9pbmRleC5odG1sKQ0KDQotIE93ZW4gU3RlcGhlbnMsIDIwMTQsIFtJbnRyb2R1Y3Rpb24gdG8gT3BlblJlZmluZV0oaHR0cDovL3d3dy5tZWFuYm95ZnJpZW5kLmNvbS9vdmVyZHVlX2lkZWFzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzExL0ludHJvZHVjdGlvbi10by1PcGVuUmVmaW5lLWhhbmRvdXQtQ0MtQlkucGRmKQ0KDQotIFZlcmJvcmdoIGV0IERlIFdpbGRlLCAyMDEzLCBbVXNpbmcgT3BlblJlZmluZV0oaHR0cHM6Ly93d3cuZ2JpZi5lcy93cC1jb250ZW50L3VwbG9hZHMvMjAxOC8wMS9Vc2luZy1PcGVuUmVmaW5lQm9vay5wZGYpDQoNCi0gW0xpYnJhcnkgQ2FycGVudHJ5OiBPcGVuUmVmaW5lXShodHRwczovL2xpYnJhcnljYXJwZW50cnkub3JnL2xjLW9wZW4tcmVmaW5lLzAxLWludHJvZHVjdGlvbi9pbmRleC5odG1sKQ0KDQotIFtHcmF0ZWZ1bCBEYXRhXShodHRwczovL2dpdGh1Yi5jb20vc2NvdHR5dGhlcmVkL2dyYXRlZnVsZGF0YS93aWtpKSAgDQoNCi0gW0RhdmlkIEh1eW5oLCBHb29nbGUgUmVmaW5lXShodHRwOi8vd3d3LmRhdmlkaHV5bmgubmV0L3NwYWNlcy9uaWNhcjIwMTEvdHV0b3JpYWwucGRmKQ0KDQotIFtPcGVuIFJlZmluZSBGT3IgTGlicmFyaWFuc10oaHR0cDovL2xpd29uZy5ibG9nc3BvdC5jb20vKQ0KDQotIFtDaGVhdCBTaGVldDogUmVndWxhciBFeHByZXNzaW9ucyAmIEdSRUxdKGh0dHBzOi8vY29kZTRsaWJ0b3JvbnRvLmdpdGh1Yi5pby8yMDE4LTEwLTEyLWFjY2Vzcy9Hb29nbGVSZWZpbmVDaGVhdFNoZWV0cy5wZGYpDQoNCi0gKlJlY2lwZXMqOiBbT3BlbiBSZWZpbmUgZm9yIExpYnJhcmlhbnNdKGh0dHA6Ly9saXdvbmcuYmxvZ3Nwb3QuY29tL3NlYXJjaC9sYWJlbC9yZWNpcGUpDQoNCi0gW0dSRUwgUmVjaXBlc10oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL1JlY2lwZXMpDQoNCi0gW0V0YyFdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9FeHRlcm5hbC1SZXNvdXJjZXMpDQoNCg0KPHN0eWxlPg0KLnJpZ2h0IHsNCiBmbG9hdDogcmlnaHQ7DQp9DQoNCi5jZW50ZXIgew0KIGFsaWduOiBjZW50ZXI7DQp9DQoNCi5ub3RlIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJvcmRlci1zdHlsZTogc29saWQ7DQogIGJvcmRlci1jb2xvcjogZ3JlZW47DQogIGJvcmRlci13aWR0aDogdGhpbjsNCiAgZm9udC1zaXplOiA5MCU7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQp9DQoNCi5ib3gxIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJhY2tncm91bmQ6ICNlMGViZWI7DQogIGNvbG9yOiBibGFjazsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCn0NCg0KLmJveDIgew0KICBwYWRkaW5nOiAwLjVlbTsNCiAgYmFja2dyb3VuZDogIzkyYjliOTsNCiAgY29sb3I6IHdoaXRlOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KLmNlbnRlciB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KLnRpdGxlIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBjb2xvcjogIzAwMzM2NjsNCn0NCg0KLnN1YnRpdGxlIHsNCiAgY29sb3I6ICMwMDMzNjY7DQp9DQoNCmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGxlZ2VuZCB7DQogIGNvbG9yOiAjNUE3QjlDOw0KfQ0KDQo8L3N0eWxlPg==